将List<T>转化成 DataTable调整可空类型的转化错误

摘要:
加载表结构并将其保持为XMLViewCodestringcmdText=@“select*from kb_lable_tempwhere 1=2”;使用(SqlConnectionconn=newSqlConnection(DBCtx.ConStr)){DataTabledt=newDataTable();SqlCommandcmd=newSqlCommand(cmdText,conn);conn

加载表结构并保持成XML

将List<T>转化成 DataTable调整可空类型的转化错误第1张将List<T>转化成 DataTable调整可空类型的转化错误第2张View Code
                string cmdText = @"select   * from kb_lable_temp where 1=2";
                using (SqlConnection conn = new SqlConnection(DBCtx.ConnStr))
                {
                      DataTable dt = new DataTable();
                      SqlCommand cmd = new SqlCommand(cmdText,conn);
                      conn.Open();
                      using (var dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly))
                      {
                          dt.Load(dr);
                          dt.WriteXmlSchema("C:\\xxx.xml");
                      }
                      

                }
                DataTable dt3 = new DataTable();
                dt3.ReadXmlSchema("C:\\xxx.xml");

List<T>到DataTable

将List&lt;T&gt;转化成 DataTable调整可空类型的转化错误第3张将List&lt;T&gt;转化成 DataTable调整可空类型的转化错误第4张View Code
using System.Data;
using System.Collections.Generic;
using System.Reflection;
using System;
using System.Collections;
namespace F.Studio.Util
{
    public static class DataTableExtensions
    {
        /// <summary> 
        /// 转化一个DataTable 
        /// </summary> 
        /// <typeparam name="T"></typeparam> 
        /// <param name="list"></param> 
        /// <returns></returns> 
        public static DataTable ToDataTable<T>(this IEnumerable<T> list,params string[] tableName)
        {
            //创建属性的集合 
            List<PropertyInfo> pList = new List<PropertyInfo>();
            //获得反射的入口 
            Type type = typeof(T);
            string tname = "Table1";
            if (tableName.Length >= 1)
            {
                tname = tableName[0];
            }
            DataTable dt = new DataTable(tname);
            //把所有的public属性加入到集合 并添加DataTable的列 
            Array.ForEach<PropertyInfo>(type.GetProperties(), p =>
            {
                pList.Add(p); 
                var theType=p.PropertyType;
                //处理可空类型
                if (theType.IsGenericType && theType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
                {
                    dt.Columns.Add(p.Name,Nullable.GetUnderlyingType(theType));
                }
                else
                {
                    dt.Columns.Add(p.Name, theType);
                }
            });
            foreach (var item in list)
            {
                //创建一个DataRow实例 
                DataRow row = dt.NewRow();
                //给row 赋值 
                pList.ForEach(p =>
                {
                    var v=p.GetValue(item, null);
                    row[p.Name] = v==null ? DBNull.Value : v;
                    
                });
                //加入到DataTable 
                dt.Rows.Add(row);
            }
            return dt;
        }
}
}

免责声明:文章转载自《将List&amp;lt;T&amp;gt;转化成 DataTable调整可空类型的转化错误》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇单片机用定时器分配任务的程序结构总结Camera Service下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RedisTemplate常用集合使用说明-opsForList(三)

1、leftPush(K key, V value)   在变量左边添加元素值。 Java代码   redisTemplate.opsForList().leftPush("list","a");   redisTemplate.opsForList().leftPush("list","b");   redisTemplate.opsForList()...

mybatis传入多个参数

需要查阅本文的基本都是需要传入多个参数的,这里记住一句话:无论你传的参数是什么样的,最后mybtis都会将你传入的转换为map的,那么既然这样,当我们要传入多个参数时,何不直接给与map类型即可,然后mapper.xml通过#{map.key}来获取值即可,这个特别适合动态搜索,或者多个参数的查询,并且可以在mapper的xml语句中通过if判断来实现若为...

生成指定数量的假数据

实际上也不是什么正经需求,只是在画页面的时候需要放一些随机的假数据,且最好不要重复。我这里只放了十套假数据就懒得再放了,写成了一个方法先放在这里 随机生成一些假数据: private String getRandomInfo(String flag, int num){ List<String> list = null; int...

datatable 参数详解

datatable 详解 var docrTable = $('#docrevisontable').dataTable({ language:lang, //提示信息 autoWidth: false, //禁用自动调整列宽 stripeClasses: ["odd", "even"], //为奇偶行加上样式,兼容不支持CSS伪类的场合...

读《Effect Java中文版》

读《Effect Java中文版》 译者序 序 前言 第1章引言 1   第2章创建和销毁对象 4 第1条:考虑用静态工厂方法代替构造函数 4 第2条:使用私有构造函数强化singleton属性 8 第3条:通过私有构造函数强化不可实例化的能力 10 第4条:避免创建重复的对象 11 第5条:消除过期的对象引用 14 第6条:避免使用终结函数 17  ...

mybatis批量foreach的使用

  最近在使用mybaits的过程中经常会碰到批量插入、更新的需求,经过查询资料和调试,现在总结如下(数据库mysql、oracle)   一、批量更新     1、oracle数据库 <update parameterType="list"> <foreach collection="list" item="item" index...