2011-07-13 51 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")); 
相關問題