2016-07-05 5 views
1

dbで画像を取得する際に私のコードに何が問題なのか分かりません。画像パスファイルを使用せずに画像を挿入すると、画像がカムによって提供されます。db内のC#取得イメージ。無効なエラーパラメータを取得する

ここに私のコードはデシベル

Image img = pictureBox1.Image; 
MemoryStream memStream = new MemoryStream(); 
img.Save(memStream, ImageFormat.Bmp); 
byte[] imageBt = memStream.ToArray(); 
query = ""; 
query += "INSERT INTO table(picture) VALUES ('" + imageBt + "')"; 
cmd = new MySqlCommand(query, con); 
cmd.ExecuteNonQuery(); 
con.close(); 

に画像を挿入してあります。ここに私のコードは、DB

query = ""; 
query += "SELECT picture FROM table WHERE id = '1'"; 
cmd = new MySqlCommand(query, con); 
con.Open(); 
MemoryStream ms = new MemoryStream(); 
byte[] image = (byte[])cmd.ExecuteScalar(); 
ms.Write(image, 0, image.Length); 
con.Close(); 
Bitmap bmp = new Bitmap(ms) 
pictureBox1.Image = bmp; //Still get the Error here parameter is not valid 

で画像を検索していたデータベースに画像を保存であっanywrongプロセスです。 Btw私の画像タイプはdbです。なぜ私はそれが常にエラーをスローしたイメージを取得することで動作しないのかわかりません。ありがとう

+0

私もこれを試してみてくださいしかし、私はまた DR = cmd.ExecuteReader()は動作しません。 if(dr.Read()) { byte [] data =(byte [])dr ["picture"]; MemoryStream ms =新しいMemoryStream(データ)。 pictureBox1.Image = Image.FromStream(ms); } –

+1

テキストを挿入しようとしているようです。 SQLインジェクションと書式設定の問題を回避するには、パラメータを使用します。 – LarsTech

+0

SQLパラメータの使用をすぐに開始する必要があります。 – Plutonix

答えて

2

読み込み中、ストリームを巻き戻していません。 Writeの場合は、その後にms.Position = 0;を設定する必要があります。それとも単純:

byte[] image = ... 
var ms = new MemoryStream(image); 

書いて、あなたがデータを直接注入しているように見える:データからストリームを作成し、その後、次のようにする必要がありません。それは...確かにうまくいかないでしょう - 実際にはSystem.Byte[]と書いています。理想的には、パラメータを使用します。

query = "INSERT INTO table(picture) VALUES (@blob)"; 
cmd = new MySqlCommand(query, con); 
cmd.Parameters.AddWithValue("blob", imageBt); 
cmd.ExecuteNonQuery(); 

(正確な構文は、RDBMSの実装の間で変更する場合があります)

+0

本当にこの質問に答えるためにありがとう:) 私は私がどのように私はデータベースに画像を挿入する方法を変更する必要がありますか質問する –

+0

@ isseiくんはい、コードは質問はDBに画像を挿入しませんIItは毎回 "System.Byte []" '文字列を挿入します。私はあなたが意図したものではないと推測しています –

+0

ええ、 dbを取得し、それを取得します。私はそれを取得しようとすると、データベース内の画像と思われるエラーパラメータを有効にしない無効にします。どのように私はそれを修正するか、 –

関連する問題