2011-07-13 4 views
5

私はasp.net/c#プログラムでSQL Server 2008を使用しています。私はdbのデータフォームをフェッチするために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

データベースに格納されるビットは、実際には2つだけでなく、3つの状態を持つことができます。このため、目的のタイプは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

それはどのような変数の型に行くのですか?グレッグがnull可能なブールを必要とするかどうかは、彼がテーブルを設定する方法とビット列がヌルを許可するかどうかによって決まります。 –

+0

私はNULLを許可する必要があります(テストのためだけです)。しかし、私は 'ブール'を使用するとエラーが発生します。データ・タイプ。私はifステートメントでそれを使用していて、それは 'bool'から変換できないと言っています。ブールにこのデータ型を使用するには、何か別の処理を行う必要がありますか? – ImGreg

+0

@Gregはそれを使用する方法を示すように更新しました –

2

ビットを検索してブール値に格納できます。私は、レコードがアクティブかどうかを示すためにビット(0または1)を使用します。私はそれを私のC#アプリに取り込むとき、私はブール変数にそれを格納します。それはあなたが求めているのですか?

+0

私はあなたがdbから値を取得するためにGetBoolean()メソッドを使用していると仮定していますか? – ImGreg

+0

私はlinqと亜音速を使用しています。私のデータベーステーブルからのビット値は、ブール変数として自動的に取得されます... –

10

boolはあなたが探しているものです。データベーステーブルがNULL値を許可するかどうかによって、NULL可能な型の場合はboolまたはbool?になります。

(ビット列がNULL値許可する場合 - あなたはこれを行うことができます多くの方法)でない場合

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

を、そして:

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

ブールデータ型は、SQL Serverからビットデータ型を読み込むのに十分です2008

1

ちょうどジョエルの答えに何かを追加したい...あなたはboolにnullをキャストする必要がありますか?またはそのステートメントでエラーが発生します。

var myvar = reader.IsDBNull(reader.GetOrdinal("field_name")) 
      ? (bool?)null 
      : reader.GetBoolean(reader.GetOrdinal("field_name")); 
関連する問題