SqlDataReader从SQL Server 2008中读取位数据类型

本文关键字:读取 数据类型 2008 SQL Server SqlDataReader | 更新日期: 2023-09-27 18:01:53

我在一个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",但我不完全理解它是如何工作的,或者它是否适合这种情况?

感谢每个人的持续帮助!

SqlDataReader从SQL Server 2008中读取位数据类型

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

(如果位列允许为空——有很多方法可以做到这一点)

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

如果没有,则:

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

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

然而,看起来你想要.GetBoolean()方法。该方法要求您在调用该方法之前检查是否为空。代码可能看起来像这样:

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

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

只是想给Joel的回答补充一些东西…你必须将null转换为bool吗?或者语句出现错误:

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

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