Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无效的存储类型:DBNull_C#_.net_Datatable_Datarow_Expando - Fatal编程技术网

C# 无效的存储类型:DBNull

C# 无效的存储类型:DBNull,c#,.net,datatable,datarow,expando,C#,.net,Datatable,Datarow,Expando,当使用expando对象填充我的数据表时,当我初始化一个新的datarow时,我会遇到以下错误消息。例外情况是: 无效的存储类型:DBNull publicstaticdatatable到ldatatable(列表项) { DataTable DataTable=新数据表(“CLWorkQueue”); //获取所有属性 数据行dr; var expandoDict=作为IDictionary的项[0]; foreach(expandoDict.Keys中的var键) { if((expando

当使用expando对象填充我的数据表时,当我初始化一个新的
datarow
时,我会遇到以下错误消息。例外情况是:

无效的存储类型:DBNull

publicstaticdatatable到ldatatable(列表项)
{
DataTable DataTable=新数据表(“CLWorkQueue”);
//获取所有属性
数据行dr;
var expandoDict=作为IDictionary的项[0];
foreach(expandoDict.Keys中的var键)
{
if((expandoDict[key]).GetType()==typeof(DateTime))
{
dataTable.Columns.Add(key.ToString(),typeof(DateTime));
}
其他的
{
dataTable.Columns.Add(key.ToString(),expandoDict[key].GetType());
}
}
对于(int i=0;i
您的
项中第一个结果的值[0]
was
DBNull.Vaue
-这是SQL客户端填充到结构中的内容。这是SQL客户端用来指示空值的内容。因此,
IDictionary
的第一个
值中对象的实际类型是
DBNull
…而不是有值时的类型。您可以在将该列添加到datarow之前,必须迭代字典,直到得到一个值……或者想出一种更可靠的方法将类型分配给该列

public static DataTable ToCLDataTable<T>(List<T> items)
{
    DataTable dataTable = new DataTable("CLWorkQueue");
    //Get all the properties
    DataRow dr;

    var expandoDict = items[0] as IDictionary<string, object>;
    foreach (var key in expandoDict.Keys)
    {
        if ((expandoDict[key]).GetType() == typeof(DateTime))
        {
            dataTable.Columns.Add(key.ToString(), typeof(DateTime));
        }
        else
        {
            dataTable.Columns.Add(key.ToString(), expandoDict[key].GetType());
        }
    }

    for (int i = 0; i < items.Count; i++)
    {
        var expandoDictData = items[i] as IDictionary<string, object>;
        //var values = new object[expandoDictData.Count];
        int j = 0;
        dr = dataTable.NewRow(); /*Though the datatable has all the required columns, but whenever i try to initialize a new row an exception occurs.*/
        foreach (var key in expandoDictData.Keys)
        {
            //values[j] = expandoDictData[key].ToString();
            dr[key] = expandoDictData[key].ToString();
            j++;
        }
        dataTable.Rows.Add(dr);
        //dataTable.Rows.Add(values);
    }[enter image description here][1]