2017-03-26 18 views
0

最初に、preEntities()メソッドは新しいレコードをEntitiesテーブルに挿入します。挿入された値の1つがイメージです。ビジュアルスタジオデータベースのこの列のデータ型は「イメージ」です。c#FromStream(stream)無効なパラメータですか?

loadPanel()メソッドは、テーブル内のすべてのレコード(WHERE TYPE = OBSTACLE)からイメージを取り出し、そのイメージでピクチャボックスを作成することになっています。しかし、FromStream()メソッドにエラーがあります: "INVALID PARAMETER";私はエラーが現れたところにコメントを書いた。私は以前にこのエラーに関する質問が、私は私を助けた:(

private void preEntities() { 
     string constring = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=" 
      + "|DataDirectory|\\DonaldJump.mdf;Integrated Security=True;Connect Timeout=30"; 
     SqlConnection con = new SqlConnection(constring); 
     con.Open(); 
     byte[] image = ImageToByteArray(Properties.Resources.Pipe); 
     string q = "INSERT INTO dbo.Entities(Name, Type, Image, Width, Height) VALUES('Pipe','Obstacle','" + image + "','97','150')"; 
     SqlCommand cmd = new SqlCommand(q, con); 
     cmd.ExecuteNonQuery(); 
    } 

    private byte[] ImageToByteArray(System.Drawing.Image imageIn) { 
     using (var ms = new MemoryStream()) { 
      imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
      return ms.ToArray(); 
     } 
    } 

    private void loadPanel() { 
     string constring = "Data Source (LocalDB)\\MSSQLLocalDB;AttachDbFilename=" 
      + "|DataDirectory|\\DonaldJump.mdf;Integrated Security=True;Connect Timeout=30"; 
     SqlConnection con = new SqlConnection(constring); 
     con.Open(); 
     string q = "SELECT * FROM dbo.Entities WHERE Type='obstacle';"; 

     DataTable dt = new DataTable(); 
     using (var command = new SqlCommand(q, con)) { 
      using (SqlDataReader dr = command.ExecuteReader()) { 
       dt.Load(dr); 
      } 
     } 

     foreach (DataRow dr in dt.Rows) { 
      PictureBox pb = new PictureBox(); 
      pb.Location = new Point(10, 10); 
      pb.Size = new Size(50, 50); 
      pb.SizeMode = PictureBoxSizeMode.Zoom; 
      byte[] img = dr.Field<byte[]>("Image"); 
      MemoryStream mstream = new MemoryStream(img); 
      pb.Image = Image.FromStream(mstream); //ERROR IS HERE!!!!!!!!!!!!!!!!!!!!! 
      pb.Name = dr.Field<string>("Name"); 
      pb.Parent = flowLayoutPanel1; 
      pb.Click += pbClick; 
      pb.BringToFront(); 
     } 
    } 
+0

あなたがファイルにストリームを保存し、画像ビューアでそれを開こう – Kalten

+0

ありません、どのようにしましたか?私はあなたをするでしょうか?で? –

+0

'File.WriteAllBytes(" path "、img);'。しかし、実際の問題は節約の部分です。 – Kalten

答えて

1

をあなたはバイト配列と文字列を連結することはできません、まだ何かを見つけることができませんでした。結果は'Pipe','Obstacle','System.Byte[]','97','150'のようなものになります検索。

あなたはSqlParameterを使用する必要が 最初にクエリを作成して、あなたのコマンドにパラメータを追加します。

string q = "INSERT INTO dbo.Entities(Name, Type, Image, Width, Height) VALUES('Pipe','Obstacle',@image,'97','150')"; 
SqlCommand cmd = new SqlCommand(q, con); 
cmd.Parameters.AddWithValue("image", img); 
+0

助けてくれてありがとう! –

関連する問題