0

私のアプリケーションは画像データをデータベースに保存し、情報をフォームにロードするときに、画像をパネルにロードします。これは正常に機能しています。しかし、ユーザーが画像を保存したくない場合に備えて、データベースの画像フィールド(バイナリ)に「0」を挿入しました。データベースからこの情報(0x00000000)をロードしている間、次の例外がスローされます。

パラメータが無効です。」

ここで私はいくつかのコードを与えています:

データベースに画像を保存する:

if(user has selected an image)
{
   Byte[] imageBytes = File.ReadAllBytes(imagePatient);
   sqlCommand.Parameters.AddWithValue("Img", imageBytes); //Img is database column for images
}
else
{
   sqlCommand.Parameters.AddWithValue("Img", 0);
}

データベースからの画像の読み込み:

Byte[] imageData = new Byte[0];
imageData = (Byte[])(dataSet.Tables["Patients"].Rows[0]["Img"]);
MemoryStream stream = new MemoryStream(imageData);
panelImage.BackgroundImage = Image.FromStream(stream);

データがゼロ形式でない場合にのみ、BackgroundImageをロードできるようにするチェックを入れようとしました。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

NULLの代わりにa を保存し0ます。

if(user has selected an image) 
{ 
   Byte[] imageBytes = File.ReadAllBytes(imagePatient); 
   sqlCommand.Parameters.AddWithValue("Img", imageBytes); //Img is database column for images 
} 
else 
{ 
    sqlCommand.Parameters.Add("Img", SqlDbType.VarBinary, -1 );
    sqlCommand.Parameters["Img"].Value = DbNull.Value;
} 

次に、ifステートメントを使用して、null でないかどうかを確認します。

Byte[] imageData = new Byte[0]; 
imageData = (Byte[])(dataSet.Tables["Patients"].Rows[0]["Img"]); 
if(imageData != null)
{
    MemoryStream stream = new MemoryStream(imageData); 
    panelImage.BackgroundImage = Image.FromStream(stream); 
}

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

于 2012-04-02T17:49:15.247 に答える