代码之家  ›  专栏  ›  技术社区  ›  Rob Bell

从数据库检索数据时是否强制转换?

  •  5
  • Rob Bell  · 技术社区  · 17 年前

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

    3 回复  |  直到 17 年前
        1
  •  4
  •   to StackOverflow    17 年前

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

    1. 显然,您需要能够处理dbnulls(例如,通过使用convert.isdbnull测试)

    2. 对于executescalar,我认为您需要检查空值和dbnull。

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

      插入到我的表中… 从mytable中选择autoidcolumn,其中autoidcolumn=scope_identity()。

    INSERT INTO MyTable ...
    SELECT CAST(SCOPE_IDENTITY() AS INT)
    
        2
  •  0
  •   Galwegian    17 年前

    两个 CAST CONVERT 用于显式地将一种数据类型的表达式转换为另一种数据类型。然而,随着 转换 您可以指定 格式 风格也一样。

    强制转换语法:

    CAST ( expression AS data_type [ (length ) ])
    

    转换语法:

    CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
    
        3
  •  0
  •   Einstein    17 年前

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

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

    Convert在较少的平台上可用。

    如果您有多个平台,那么convert只能用于特殊情况,例如不能用cast完成的自定义格式设置。