私の目標は、varbinary(max) フィールドが null でない場合に varbinary(max) データベース フィールドから値を返す linq to sql クエリを実行することです。以下のコードでは、x.doc はデータベース内の varbinary(max) です。
私のコードの基本はこれです:
var pdfquery = from x in dataContext.Statements
where x.enccc == card && x.stDate == datetime
select x.doc;
if (pdfquery.Count() == 1 )
{
pdffile = pdfquery.FirstOrDefault().ToArray();
}
else
{
//go to a webservice to get pdffile and write it to the db
}
if ステートメントが true であるため、コード ブロックは null 値を返しました。2 つのパラメーターが渡されると、データベースに NULL 値があります。
「pdfquery.Count() == 1」のセクションがどこにあるか、私は試しました:
それらのすべてが私に Null Value Exception を与えています。
私は何が欠けていますか?クエリが null 値 varbinary(max) を返すタイミングを特定して、適切なアクションを実行するにはどうすればよいですか?
更新 (2014 年 7 月 17 日): null 参照例外を try catch で処理することにしました。
try
{
var pdfquery = from x in dataContext.Statements
where x.enccc == card && x.stDate == datetime
select x.doc;
pdffile = pdfquery.SingleOrDefault().ToArray(); //gets the binary data and converts it to a byte array
}
catch(NullReferenceException nux)
{
logger.LogDebug("No Binary Data Exists for Statement, making Request ---- ",nux);
getStatment(unencArray);
getByteArray(statementxml);
writeByteArrayToDb(unencArray, pdffile);
}
他の例外がスローされた場合にキャッチできるようにしたいので、これを行うのはあまり好きではありません。null 値が正常に処理されることを期待して、Byte[] を ?Byte[] に変更してみます。