追加 - ビット フラグ c#




SqlDataReaderでビット値を取得してboolに変換する方法 (3)

IsConfirmed列にnull値がない場合は、コードが機能するはずIsConfirmed
通常、これらのビット列はNOT NULLプロパティまたはデフォルト値0を持ちますが、null値を持つ可能性があります。この場合、エラーが発生した場合、コードは失敗します。

この方法で修正することができます(ただし、このチェックでは列の位置が必要です)

int colPos = sqlDataReader.GetOrdinal("IsConfirmed");
bool isConfirmed = sqlDataReader.IsDBNull(colPos) ? false : sqlDataReader.GetBoolean(colPos));

列の位置を見つけるための呼び出しが本当に嫌な場合は、呼び出しを非表示にする拡張メソッドを作成することができます

public static class ReaderExtensions
{
    public static bool IsDBNull(this SqlDataReader reader, string colName)
    {
        int colPos = reader.GetOrdinal(colName);
         return reader.IsDBNull(colPos);
    }
}

それを呼び出す

bool isConfirmed = int.Parse((sqlDataReader.IsDBNull("IsConfirmed") 
                    ? "0" : sqlDataReader["IsConfirmed"].ToString())) == 1;

私は簡単なクエリを使用してデータベースからユーザー情報を取得しています。

select * from dbo.[User] u where u.Email = @email

次に、IsConfirmed(データベースのビット型の列として表される)という列の値を取得し、boolに変換しようとします。

bool isConfirmed = int.Parse(sqlDataReader["IsConfirmed"].ToString()) == 1;

次に、 "入力文字列が正しい形式ではありませんでした"というFormatExceptionエラーが表示されます。

私はこのコードを提供する答えで同様の質問を見た:

bool isConfirmed = sqlDataReader.GetBoolean(0);

しかし、私はIsConfirmed列のインデックスを知らず、それを知りたくないので、これは私のケースでは機能しません。 列名を使用したいと思います。


これを試してください: Convert.ToBoolean(reader["Columnname"])またはConvert.ToBoolean(reader["Columnname"])使って、たとえば: Convert.ToBoolean((3))


使用できる列名を使用する場合は

bool isConfirmed = sqlDataReader.GetBoolean(sqlDataReader.GetOrdinal("IsConfirmed"));




sqldatareader