【问题标题】:Return a boolean value from a select query从选择查询返回布尔值
【发布时间】:2011-07-02 14:15:51
【问题描述】:

我想选择布尔值:

SELECT field1, field2, 1 as is_field
FROM TABLE

在 Visual Studio 2010 中我正在做:

bool b = row.Field<bool>("is_field");

但我得到了例外:

指定的转换无效。

如何将布尔值返回为 boolean 而不是 int

【问题讨论】:

  • SQL Server/Transact SQL 中没有布尔数据类型。最接近的是位,AdaTheDev 正在引导您实现 - 但无法指定位字面量 - 您必须提供不同数据类型的字面量并进行转换。

标签: c# .net sql-server sql-server-2005 tsql


【解决方案1】:

从 SQL 端,你可以这样做:

SELECT field1, field2, CAST(1 AS BIT) AS is_field
FROM TABLE

强制它以 BIT 而不是 int 的形式返回。这应该可以解决问题

更新: 你对这样使用 CAST 有什么顾虑? SQL Server 在优化方面非常出色,例如上述查询的执行计划将显示 is_field 是一个可以预先评估一次的常量(此处有相关文章:http://msdn.microsoft.com/en-us/library/ms175933.aspx)。即使没有这个,如果您担心性能,那么您也不应该担心它 - 这将是过早的优化。

【讨论】:

  • @Naor - 您要么需要将其作为 BIT 从 SQL 返回并保持 .NET 代码原样.....要么保持 SQL 原样并将 .NET 代码更改为做类似的事情: bool b = Convert.ToBoolean(row.Field("is_field"));
  • 我想在不使用强制转换的情况下从 sql 中将其作为位返回。我不在乎返回“true”或类似的东西而不是 1,只要它是 bool。
  • @Naor - 没有显式 CAST 的最终选项是:DECLARE @True BIT SET @True = 1 SELECT field1, field2, @True AS is_field ...
  • @Naor - 这对你有帮助吗(我的最后一条评论)?哪个匹配:stackoverflow.com/questions/5090186/…
  • 我使用的是视图而不是存储过程。因此我不能声明@True 变量。
【解决方案2】:

根据@AdaTheDev 的建议:

bool b = row.Field<int>("is_field") == 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多