5

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

4

3 回答 3

4

出于你所说的原因,我总是会投。我知道你需要处理的问题是:

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

  2. 在 ExecuteScalar 的情况下,我相信您需要检查 null 以及 DBNull。

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

    插入 MyTable ... 从 MyTable 中选择 AutoIdColumn,其中 AutoIdColumn = SCOPE_IDENTITY()

或者

INSERT INTO MyTable ...
SELECT CAST(SCOPE_IDENTITY() AS INT)
于 2008-10-08T10:17:22.290 回答
0

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

CAST 的语法:

CAST ( expression AS data_type [ (length ) ])

转换的语法:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
于 2008-10-08T10:18:22.803 回答
0

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

CAST 受到 SQL 标准的认可,可在最多的 RDBMS 平台上工作。

CONVERT 在更少的平台上可用。

如果您有多平台考虑,则 CONVERT 应仅用于特殊情况,例如无法使用 CAST 完成的自定义格式。

于 2008-11-30T00:29:18.060 回答