从数据库中检索数据时转换或转换?

时间:2008-10-08 10:10:20

标签: .net datatable casting

访问从数据库检索到的DataTable中的对象时,是否有任何理由不将对象强制转换为所需类型,或者是否有理由使用转换?我知道当我们知道我们正在使用什么数据类型时会抛出规则,并在尝试将数据类型更改为不是的时转换。假设我们知道列中存储了什么数据类型,强制转换似乎是合适的,但是有没有DB类型问题意味着我们不能依赖它?

3 个答案:

答案 0 :(得分:4)

由于你陈述的原因,我总是会施展。我知道你需要处理的问题是:

  1. 你显然需要能够处理DBNulls(例如通过使用Convert.IsDBNull进行测试)

  2. 在ExecuteScalar的情况下,我相信你需要检查null和DBNull。

  3. SQL Server @@ IDENTITY和SCOPE_IDENTITY函数返回数字(十进制),即使对于声明为INT的列也是如此。在这种情况下,您可以转换两次“(int)(十进制)值”或在T-SQL代码中处理它,例如:

    INSERT INTO MyTable ... SELECT AutoIdColumn FROM MyTable WHERE AutoIdColumn = SCOPE_IDENTITY()

  4. INSERT INTO MyTable ...
    SELECT CAST(SCOPE_IDENTITY() AS INT)
    

答案 1 :(得分:0)

CASTCONVERT都用于显式地将一种数据类型的表达式转换为另一种数据类型。但是,使用CONVERT,您也可以指定格式样式。

CAST语法:

CAST ( expression AS data_type [ (length ) ])

CONVERT的语法:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

答案 2 :(得分:0)

从RDBMS中进行检索时,您应该让数据库驱动程序处理本机和请求类型之间的编组。

CAST受SQL标准认可,适用于最多数量的RDBMS平台。

CONVERT可以在更少的平台上使用。

如果您有多平台的结论,CONVERT只应用于特殊情况,例如CAST无法实现的自定义格式。