Den*_*ail 12 c# sql-server datatable datarow
我有一个文本文件,我读入数据表,然后执行批量插入SQL Server表.当所有导入的值都被视为字符串(日期,字符串,整数等都被导入到字符串字段中)时,它非常快并且工作得很好.
现在我已经解决了这个概念,我将回去在数据库和我的代码中分配真实的数据类型.数据库具有分配给字段的正确类型.我现在正在编写代码.
我有约会的问题.正如我所提到的,一切都是一个字符串,并转换为正确的类型.在下面的代码中,我想测试表示日期的字符串值是null还是空格.如果它不为null,则使用现有值.否则,将其设置为null.
row[i] = !string.IsNullOrWhiteSpace(data[i]) ? data[i] : DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
我试过使用null
但是得到一个错误告诉我改为使用DBNull
.当我使用时DBNull
,我收到一条消息,告诉我字符串和字符串之间没有隐式转换System.DBNull
.
数据表中的列具有指定的数据类型(在本例中为DataType = Type.GetType("System.DateTime")
),我AllowDBNull = true
为此列设置了数据类型
我该如何处理?
谢谢!
Ree*_*sey 15
问题是由于您正在使用的操作.由于DBNull.Value
不是字符串,因此不能使用条件运算符.这是因为,从条件运算符docs:
first_expression和second_expression的类型必须相同,或者从一种类型到另一种类型必须存在隐式转换.
试着这样做:
if (!string.IsNullOrWhiteSpace(data[i]))
row[i] = data[i];
else
row[i] = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
这绕过了双方的转换要求是相同的.或者,您可以将两者都强制转换为System.Object
显式,并仍然使用条件运算符.
你需要将它们都投射到像这样的对象:
row[i] = !string.IsNullOrWhiteSpace(data[i]) ? (object)data[i] : (object)DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35991 次 |
最近记录: |