私の問題に対する答えはスタックオーバーフローを洗いましたが、私の状況には何も一致しません。struct initのnullableブール値にヌル値を代入する
私はストアドプロシージャから取得したデータのスキーマを表す構造体を持っています。ブール値フィールドのデータ型はNULL可能ですが、返される値がnullの場合、値をリスト項目に代入することはできません。
public GuidelineSchema gl;
public struct GuidelineSchema
{
public int id;
public int GLtypeID;
public int typeValue;
public Nullable<bool> isInlineLayout;
public int ResinGroupID;
public int NotResinGroupID;
public int ResinSubTypeID;
.
.
.
}
と私はここでそれを移入
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
GuidelineSchema gl = new GuidelineSchema() {
id = sdr.IsDBNull(0) ? 0 : sdr.GetInt32(0),
GLtypeID = sdr.IsDBNull(1) ? 0 :sdr.GetInt32(1),
typeValue = sdr.IsDBNull(2) ? 0 : sdr.GetInt32(2),
//isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetBoolean(3),
//isInlineLayout = (bool?)sdr.GetSqlBoolean(3),//.GetBoolean(3),
//isInlineLayout = (Nullable<Boolean>)sdr.GetBoolean(3),// sdr.IsDBNull(3) ? : sdr.GetBoolean(3),//sdr.IsDBNull(3) ? false :
//isInlineLayout = sdr.IsDBNull(3) ? (bool?)null : sdr.GetSqlBoolean(3),
isInlineLayout = sdr.GetBoolean(3),
ResinGroupID = sdr.IsDBNull(4) ? 0 : sdr.GetInt32(4),
NotResinGroupID = sdr.IsDBNull(5) ? 0 : sdr.GetInt32(5),
.
.
.
問題はデシベル値がnullの場合にのみ発生します。
構造体は次のようになります。私はエラーが発生するたびに、すべての異なるチェックとキャストを試しました。私は、SQLデータ型、null可能なデータ型について読んできました。 nullの場合は値をtrueまたはfalseに設定すると機能しますが、nullの場合はnullにする必要があります。
誰でも知っていることを知っていると私はこれを行うことができ、それがされているときに値がnullになることができますか?
これは 'isInlineLayout = sdr.IsDBNull(3)で動作するはずですか? (bool?)null:sdr.GetBoolean(3)、 '、あなたは何のエラーを出していますか? –
こちらの回答を見るhttp://stackoverflow.com/questions/5409936/casting-datareader-value-to-a-to-a-nullable-variable – rashfmnb
これは機能しました。私はこのコードをそのまま使用していましたが、機能しませんでしたが、私が昨日の朝に仕事に入ったときにあなたのコメントを見てもう一度試してみました。無関係な文法的な難読化器などがあったに違いない。とりあえずありがとう! – Josawalk