访问从数据库检索到的DataTable中的对象时,是否有任何理由不将对象强制转换为所需类型,或者是否有理由使用转换?我知道当我们知道我们正在使用什么数据类型时会抛出规则,并在尝试将数据类型更改为不是的时转换。假设我们知道列中存储了什么数据类型,强制转换似乎是合适的,但是有没有DB类型问题意味着我们不能依赖它?
答案 0 :(得分:4)
由于你陈述的原因,我总是会施展。我知道你需要处理的问题是:
你显然需要能够处理DBNulls(例如通过使用Convert.IsDBNull进行测试)
在ExecuteScalar的情况下,我相信你需要检查null和DBNull。
SQL Server @@ IDENTITY和SCOPE_IDENTITY函数返回数字(十进制),即使对于声明为INT的列也是如此。在这种情况下,您可以转换两次“(int)(十进制)值”或在T-SQL代码中处理它,例如:
INSERT INTO MyTable ... SELECT AutoIdColumn FROM MyTable WHERE AutoIdColumn = SCOPE_IDENTITY()
或
INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)
答案 1 :(得分:0)
CAST
和CONVERT
都用于显式地将一种数据类型的表达式转换为另一种数据类型。但是,使用CONVERT
,您也可以指定格式样式。
CAST语法:
CAST ( expression AS data_type [ (length ) ])
CONVERT的语法:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
答案 2 :(得分:0)
从RDBMS中进行检索时,您应该让数据库驱动程序处理本机和请求类型之间的编组。
CAST受SQL标准认可,适用于最多数量的RDBMS平台。
CONVERT可以在更少的平台上使用。
如果您有多平台的结论,CONVERT只应用于特殊情况,例如CAST无法实现的自定义格式。