【问题标题】:SqlDataReader Reading a bit datatype from SQL Server 2008?SqlDataReader 从 SQL Server 2008 读取位数据类型?
【发布时间】:2011-07-13 15:24:30
【问题描述】:

我在 asp.net/c# 程序中使用 SQL Server 2008。我正在尝试使用 SqlDataReader 从数据库中获取数据,但我不确定数据类型“位”使用什么。

//these are the assemblies i added manually
using System.Web.Script.Services;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

SqlConnection conn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ucsConnectionString"].ConnectionString);
SqlDataReader rdr2 = null;
conn2.Open();

SqlCommand cmder = new SqlCommand("usp_Device_GetBy_DeviceID", conn2);
cmder.Parameters.AddWithValue("@ID", id);
cmder.CommandType = CommandType.StoredProcedure;
rdr2 = cmder.ExecuteReader();
rdr2.Read();

*insert datatype & var* = rdr2.GetSqlBit(rdr2.GetOrdinal("Line_Name"));

我找到了几个引用上述“GetSqlBit”的站点,但显然它不是我正在使用的程序集的一部分。有什么建议我可以从 SQL 中读取这个“位”数据类型吗?

我使用“GetSqlBinary”找到了一个类似的数据类型,但我不完全了解它是如何工作的,或者它是否适合这种情况?

感谢大家的持续帮助!

【问题讨论】:

    标签: c# sql-server-2008 stored-procedures sqldatareader


    【解决方案1】:

    bool 是您正在寻找的。根据数据库表是否允许空值,对于可空类型,它将是boolbool?

    (如果位列允许空值 - 您可以通过多种方式做到这一点)

    bitValue = reader["MyBitColumn"] as bool? ?? null;
    

    如果没有,那么:

    bitValue = (bool)reader["MyBitColumn"];
    

    【讨论】:

      【解决方案2】:

      存储在数据库中的位实际上可以具有三种状态,而不仅仅是两种:0、1 和 NULL。因此,您需要的类型是 Nullable<bool>,或 bool? 简写。

      但是,您似乎需要.GetBoolean() 方法。该方法要求您在调用该方法之前检查 null。代码可能如下所示:

      bool? Line_Name = rdr2.IsDBNull(rdr2.GetOrdinal("Line_Name"))?null:rdr2.GetBoolean(rdr2.GetOrdinal("Line_Name"));
      if (Line_Name != null && Line_Name.Value)
      {
          //...
      }
      

      【讨论】:

      • 我确实需要允许空值(更多只是为了测试..)。但是,我在使用 'bool?' 时遇到了错误?数据类型。我在 if 语句中使用它,它说它不能从 'bool?' 转换。 '布尔'。我必须做任何不同的事情才能使用这种数据类型吗?
      • @Joel Coehoorn 谢谢。这看起来像我需要的。当然也需要 isDBNull 。好东西。
      • bool 不能为空。使用 Nullable 或 Nullable。在 sql 位有 3 种状态:{1,0,NULL}。您还可以根据逻辑使用 false 或 true 代替 null。
      【解决方案3】:

      可以检索一个位并将其存储在布尔值中。我使用一个位(0 或 1)来指示记录是否处于活动状态。当我将它检索到我的 C# 应用程序中时,我将它存储在一个布尔变量中。你问的是这个吗?

      【讨论】:

      • 我假设您正在使用 GetBoolean() 方法从数据库中检索值?
      【解决方案4】:

      只是想在 Joel 的答案中添加一些内容……您必须将 null 转换为 bool?或者您会收到该语句的错误:

      var myvar = reader.IsDBNull(reader.GetOrdinal("field_name")) 
                  ? (bool?)null
                  : reader.GetBoolean(reader.GetOrdinal("field_name"));
      

      【讨论】:

        【解决方案5】:

        布尔数据类型足以从 sql server 2008 读取位数据类型

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-04
          • 2013-11-02
          • 2011-04-01
          • 2018-06-19
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多