无效的存储类型:DBNull
Invalid Storage Type: DBNull
使用 expando 对象填充我的数据表时,我在初始化新 datarow
时遇到以下错误消息。例外情况是:
Invalid Storage Type: DBNull
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]
您 items[0]
中第一个结果的值是 DBNull.Vaue
- 这是您的 SQL 客户端填充到结构中的值。这就是 SQL 客户端用来指示空值的内容。因此,IDictionary<String,object>
的第一个 Value
中的对象的实际 type 是 DBNull
...不是如果有一个价值。您可能必须迭代字典,直到获得一个值,然后才能将该列添加到数据行中……或者想出一种更可靠的方法来将类型分配给该列。
使用 expando 对象填充我的数据表时,我在初始化新 datarow
时遇到以下错误消息。例外情况是:
Invalid Storage Type: DBNull
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]
您 items[0]
中第一个结果的值是 DBNull.Vaue
- 这是您的 SQL 客户端填充到结构中的值。这就是 SQL 客户端用来指示空值的内容。因此,IDictionary<String,object>
的第一个 Value
中的对象的实际 type 是 DBNull
...不是如果有一个价值。您可能必须迭代字典,直到获得一个值,然后才能将该列添加到数据行中……或者想出一种更可靠的方法来将类型分配给该列。