2011-12-24 149 views
1

我正面临从我的数据库的columns之一获取boolean值的问题。我使用SQL Server 2008凡在我创建了一个database如下:通过SQL查询从BIT类型列中获取布尔值

表名:SysUser3和列:

产品名称|| ProductId || SelectedProducts

SelectedProductsBIT类型列,并且包含当前每个行条目的False值。现在

,我写一个SQL Query从我的“SelectedProducts”列

这里得到布尔值是我的代码:

using (SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|Database.mdf;User Instance=true")) 
     { 
      con.Open(); 

      string cmdString = "SELECT ProductName,SelectedProducts FROM SysUser3"; 
      using (SqlCommand cmd = new SqlCommand(cmdString, con)) 
      { 
       using (SqlDataReader dataRead = cmd.ExecuteReader()) 
       { 
        while (dataRead.Read()) 
        { 
         items.Add(new ProductModel 
         { 
          Selected=(bool)dataRead["SelectedProducts"]; 
          ProductName= dataRead["ProductName"].ToString() 
         }); 
        } 
       } 
      } 
     } 

我得到一个错误,在这条线,因此无法运行代码:

Selected =(bool)dataRead [“SelectedProducts”];

我正确吗?有人能告诉我代码中有什么问题吗?

+0

什么是错误信息? – 2011-12-24 05:02:10

+0

错误消息表明在上面提到的那一行上有“语法错误”,再加上以下一行ProductName = .... – 2011-12-24 05:07:52

回答

3

你有一个分号错位。将其更改为逗号。 它应该是:

   while (dataRead.Read()) 
       { 
        items.Add(new ProductModel() 
        { 
         Selected=(bool)dataRead["SelectedProducts"], 
         ProductName= dataRead["ProductName"].ToString() 
        }); 
       } 
3

您可以尝试GetBoolean(column_odrinal)方法。

if(!dataRead.IsDBNull(1)) 
    Selected=dataRead.GetBoolean(1); 

或者你可以修复它,如果返回值如果为null。

Selected = (dataRead["SelectedProducts"] as bool?) ?? false ; 
+1

在这种情况下,您知道该列的序号位置为1,但如果你想通过列名得到它,使用GetOrdinal()。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx – 2011-12-24 04:59:38