2011-07-13 54 views
5

我在一个asp.net/c#程序中使用SQL Server 2008。我试图使用SqlDataReader来获取数据形式的数据库,但我不知道该用什么数据类型“位”。SqlDataReader从SQL Server 2008读取位数据类型?

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

大家的持续帮助表示赞赏!

回答

7

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

这不适用于任何变量类型吗? Greg是否需要一个可空的布尔将取决于他如何设置他的表以及位列是否允许空值。 –

+0

我确实需要允许空值(更多只是为了测试..)。但是,我在使用'bool?'时遇到错误?数据类型。我在if语句中使用它,它说它不能从'bool'转换?到'布尔'。为了使用这种数据类型,我必须做任何不同的事情吗? – ImGreg

+0

@Greg更新以显示如何使用它 –

2

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

+0

我假设你正在使用GetBoolean()方法从数据库中检索值? – ImGreg

+0

我使用linq和亚音速;我的数据库表中的位值自动检索为布尔变量... –

10

A bool是你在找什么。根据数据库表是否允许空值,对于可为空的类型,它将是boolbool?

(如果该位列允许空值 - 很多方法可以做到这一点)

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

如果没有,那么:

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

布尔数据类型是足够的阅读从SQL Server bit数据类型2008

1

只是想添加一些东西给乔尔的答案......你必须将null投给布尔?或者你得到该错误的错误:

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