首页 文章

SqlDataReader从SQL Server 2008读取一些数据类型?

提问于
浏览
5

我在asp.net/c#程序中使用SQL Server 2008 . 我试图使用SqlDataReader从数据库中获取数据,但我不知道如何使用数据类型“bit” .

//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”找到了类似的数据类型,但我不完全了解它是如何工作的,或者它是否适合这种情况?

每个人的持续帮助表示赞赏!

5 回答

  • 1

    存储在数据库中的位实际上可以有三种状态,而不仅仅是两种: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)
    {
        //...
    }
    
  • 0

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

    (如果位列允许空值 - 您可以通过多种方式执行此操作)

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

    如果没有,那么:

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

    可以检索一个位并将其存储在布尔值中 . 我用一点(0或1)来表示记录是否有效 . 当我将其检索到我的C#应用程序时,我将其存储在一个布尔变量中 . 那是你问的吗?

  • 7

    只是想为Joel的回答添加一些内容......你必须将null转换为bool?或者你得到该声明的错误:

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

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

相关问题