2011-12-24 21 views
1

boolean値をデータベースのcolumnsから取得する際に問題が発生しました。SQL BIT型の列からブール値を取得するクエリ

テーブル名:としてSysUser3と列:私は次のように、私が作成したdatabaseSQL Server 2008使用しています

商品名を|| ProductId ||選択された製品

カラムSelectedProductsは、BITタイプのカラムであり、現時点の各ローエントリの値はFalseです。

今、私は私の「SelectedProducts」列ここ

からブール値を取得するためにSQL Queryを書いていますが、私のコードです:

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() 
         }); 
        } 
       } 
      } 
     } 

私は、この行でエラーを取得し、したがってことはできませんよコードを実行する:

選択=(bool)dataRead ["SelectedProducts"];

正しくしていますか?誰かがコードの何が間違っているか教えてもらえますか?

+0

エラーメッセージは何ですか? –

+0

エラーメッセージには、上記の行に「構文エラー」があり、次のProductName =行があることが示唆されています。 –

答えて

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 –

関連する問題