首页 > 其他分享 >根据DataTable,生成建表语句

根据DataTable,生成建表语句

时间:2023-03-31 17:13:45浏览次数:34  
标签:语句 case SqlDbType return TypeCode col var 建表 DataTable

点击查看代码
        /// <summary>
        /// 根据DataTable,生成建表语句
        /// </summary>
        /// <param name="table"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static string GetCreateTableSql(DataTable table, string tableName)
        {
            var colList = new List<string>();

            //遍历列,获取字段属性
            foreach (DataColumn col in table.Columns)
            {
                var ty = TypeHelper.ConvertTypeToSqlDbType(col.DataType) + "";
                var isautoIn = col.AutoIncrement ? $"IDENTITY({col.AutoIncrementSeed},{col.AutoIncrementStep})" : "";
                var isnull = col.AllowDBNull ? "NULL" : "NOT NULL";
                var colStr = $"[{col.ColumnName}] [{ty}] {isautoIn} {isnull} ";
                colList.Add(colStr);
            }
            //拼接建表sql
            var sql = string.Format(@" if object_id('{0}') is not null begin truncate table {0} drop table {0} end CREATE TABLE {0}(
                     {1}
                    ) ON [PRIMARY];
                    ", tableName, string.Join(",", colList));
            return sql;
        }

        public class TypeHelper
        {

            public static SqlDbType ConvertTypeToSqlDbType(Type t)
            {

                //判断convertsionType类型是否为泛型,因为nullable是泛型类, 
                //判断convertsionType是否为nullable泛型类
                if (t.IsGenericType && t.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
                {
                    //如果convertsionType为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
                    NullableConverter nullableConverter = new NullableConverter(t);
                    //将convertsionType转换为nullable对的基础基元类型
                    t = nullableConverter.UnderlyingType;
                }
                var code = Type.GetTypeCode(t);


                switch (code)
                {
                    case TypeCode.Boolean:
                        return SqlDbType.Bit;
                    case TypeCode.Byte:
                        return SqlDbType.TinyInt;
                    case TypeCode.DateTime:
                        return SqlDbType.DateTime;
                    //case TypeCode.DateTime:
                    //    return SqlDbType.DateTime2;
                    case TypeCode.Decimal:
                        return SqlDbType.Decimal;
                    case TypeCode.Double:
                        return SqlDbType.Float;
                    case TypeCode.Int16:
                        return SqlDbType.SmallInt;
                    case TypeCode.Int32:
                        return SqlDbType.Int;
                    case TypeCode.Int64:
                        return SqlDbType.BigInt;
                    case TypeCode.SByte:
                        return SqlDbType.TinyInt;
                    case TypeCode.Single:
                        return SqlDbType.Real;
                    case TypeCode.String:
                        return SqlDbType.NVarChar;
                    case TypeCode.UInt16:
                        return SqlDbType.SmallInt;
                    case TypeCode.UInt32:
                        return SqlDbType.Int;
                    case TypeCode.UInt64:
                        return SqlDbType.BigInt;
                    case TypeCode.Object:
                        return SqlDbType.Variant;
                    default:
                        if (t == typeof(byte[]))
                        {
                            return SqlDbType.Binary;
                        }
                        return SqlDbType.Variant;

                }
            }


        }

标签:语句,case,SqlDbType,return,TypeCode,col,var,建表,DataTable
From: https://www.cnblogs.com/ellafive/p/17276873.html

相关文章

  • 12 SQL语句的补充----复制表数据
    复制数据表1、复制数据1.1创建一个字段和源表不同的虚拟表 createtemporarytablet_yy( idint(16), namevarchar(25), sexvarchar(25) );源表与目标字段不一致,复制数据需要指定字段insertintot_yy(id,name,sex)selectid,sname,sexfromt_student;1.2创建一......
  • Mysql之SQL语句基础1
    一、基本概念——后续的内容将会记录作者在计科学习内容DB(数据库):存储数据的仓库,数据是有组织进行存储DBMS(数据库管理系统):操纵和管理数据库的大型软件SQL:操纵关系数据库的编程语言,是一套标准有Mysql,Oracle,SQLSever,PostgreSQlRDBMS(关系型......
  • SQL-根据已有表结构创建表、修改表名
    stringsql_Rename_MainTable=string.Empty;//改表名(主表->历史表)的sqlstringsql_Create_MainTable=string.Empty;//通过历史表的表结构创建主表的sqlswitch(dbType){caseDbType.MySql:sql_Rename_MainTable="altertable'{0}'renameto'......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-类比语句智能生成从0到1快速入门——官网推荐
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 流程控制和循环语句
             ......
  • 注释、变量和常量、输入输出语句
      ......
  • 循环语句
    3.循环语句while循环引入不知道大家是否喜欢下象棋,反正楼下大爷还是挺喜欢的~如果这盘棋下完了,可以收拾一下接着重来一局,这重来一局说到底就是重复软件中也是需要这样的功能的,像打游戏(这个大家都有经验就不过多说了)时这局没吃到"鸡",可以再重新玩一局对嘛,这也是重复程序中......
  • MySQL数据库怎么创建表?MySQL数据库基础知识
    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库......
  • MySql基本的简单sql语句
    SQL语句分类必须记住删除语句DELETEFROM表名WHERE条件插入语句简单的插入语句INSERTINTO表名(字段列表)VALUES(值列表)查询出的数据插入到已存在的表中查询出的数......
  • hive建表语句
    hive有三种建表语句1,create建表CREATEEXTERNALTABLEdwd_database.table_name(idBIGINT,user_idSTRING,gmt_modifiedTIMESTAMP,gm......