2008-10-08 91 views
5

访问从数据库中检索的DataTable中的对象时,是否有任何理由不将该对象转换为所需的类型,还是有理由使用convert?我知道规则是在我们知道我们正在处理的数据类型时进行的,并在尝试将数据类型更改为不是时进行转换。假定我们知道列中存储了什么数据类型,那么演员似乎是合适的,但是有没有任何数据库类型问题,这意味着我们不能依靠这个问题?从数据库检索数据时进行转换或转换?

回答

4

我总是会投,因为你说的原因。我知道,你需要处理的陷阱是:

  1. 你显然需要能够处理DBNulls(例如,通过与Convert.IsDBNull测试)

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

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

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

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

两个CASTCONVERT用于显式的一个的表达式转换数据类型到另一个。但是,使用CONVERT,您也可以指定格式样式。

语法CAST:

CAST (expression AS data_type [ (length) ]) 

语法CONVERT:

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

当从RDBMS retreiving你应该让本地和请求类型的数据库驱动程序句柄编组。

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

CONVERT可在较少的平台上使用。

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