2012-04-02 16 views
0

私のアプリケーションは、画像データをデータベースに保存し、フォームに情報をロードするときに画像をパネルに読み込みます。これはうまくいきます。しかし、ユーザーが画像を保存したくない場合は、データベースの画像フィールド(varbinary)に '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をロードすることができます。

どうすればこの問題を解決できますか教えてください。

答えて

1

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

その後、
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ステートメントを使用します。

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

+0

あなたはNULLを格納することは、適切なオプションであると思いませんか? –

+0

この場合、「ここにはデータがありません」と言っているので適切です – msigman

+0

このデータベーステーブルには10の列があります。 –

関連する問題