2011-07-13 38 views
5

Tôi đang sử dụng SQL Server 2008 trong chương trình asp.net/c#. Tôi đang cố gắng sử dụng SqlDataReader để lấy mẫu dữ liệu db, nhưng tôi không chắc chắn những gì để sử dụng cho datatype "bit".SqlDataReader Đọc một kiểu dữ liệu bit từ 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")); 

Tôi tìm thấy một vài trang web tham chiếu đến "GetSqlBit" ở trên nhưng dường như nó không phải là một phần của hội chúng tôi đang sử dụng. Bất kỳ đề xuất làm thế nào tôi có thể đọc "bit" datatype này từ SQL?

Tôi tìm thấy một kiểu dữ liệu tương tự bằng cách sử dụng "GetSqlBinary" nhưng tôi không hoàn toàn hiểu cách hoạt động hoặc nếu nó sẽ phù hợp với tình huống này?

Trợ giúp liên tục của mọi người được đánh giá cao!

Trả lời

7

Một bit được lưu trữ trong cơ sở dữ liệu thực sự có thể có ba trạng thái, không chỉ hai: 0, 1 và NULL. Vì lý do này, loại bạn muốn là Nullable<bool> hoặc viết tắt là bool?.

Tuy nhiên, có vẻ như bạn muốn phương thức .GetBoolean(). Phương thức đó yêu cầu bạn kiểm tra null trước khi gọi phương thức. Mã có thể trông giống như sau:

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

Điều đó có xảy ra với bất kỳ loại biến nào không? Cho dù Greg cần một bool nullable sẽ phụ thuộc vào cách ông thiết lập bảng của mình và cho dù cột bit cho phép nulls. –

+0

Tôi cần phải cho phép null (nhiều hơn chỉ để thử nghiệm ..). Tuy nhiên, tôi gặp lỗi khi sử dụng 'bool?' loại dữ liệu. Tôi đang sử dụng nó trong một tuyên bố nếu nó nói rằng nó không thể chuyển đổi từ 'bool?' để 'bool'. Tôi có phải làm gì khác để sử dụng kiểu dữ liệu này không? – ImGreg

+0

@Greg được cập nhật để hiển thị cách sử dụng nó –

2

Một bit có thể được truy xuất và lưu trữ trong boolean. Tôi sử dụng bit (0 hoặc 1) để cho biết liệu bản ghi có đang hoạt động hay không. Khi tôi lấy nó vào ứng dụng C# của mình, tôi lưu trữ nó trong một biến boolean. Đó là bạn đang hỏi?

+0

Tôi giả sử bạn đang sử dụng phương thức GetBoolean() để lấy giá trị từ db? – ImGreg

+0

Tôi đang sử dụng LINQ và cận âm; giá trị bit từ bảng cơ sở dữ liệu của tôi được tự động truy xuất dưới dạng biến boolean ... –

10

A bool là những gì bạn đang tìm kiếm. Tùy thuộc vào việc bảng cơ sở dữ liệu có cho phép một giá trị null hay không, nó sẽ là bool hoặc bool? cho một loại có thể vô hiệu.

(nếu bit cột cho phép null - nhiều cách bạn có thể làm điều này)

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

nếu không, sau đó:

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

datatype Boolean là đủ để đọc datatype chút từ máy chủ sql 2008

1

Chỉ muốn thêm điều gì đó vào câu trả lời của Joel ... bạn phải bỏ giá trị rỗng vào bool? hoặc bạn gặp lỗi với tuyên bố đó:

var myvar = reader.IsDBNull(reader.GetOrdinal("field_name")) 
      ? (bool?)null 
      : reader.GetBoolean(reader.GetOrdinal("field_name")); 
Các vấn đề liên quan