Masz kilka problemów z kodem. Zajmę się tym linijka po linijce:
MemoryStream ms =new MemoryStream();
byte[] PhotoByte=null;
PhotoByte=ms.ToArray();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
PhotoByte =ms.ToArray();
Chociaż to nie problem, masz tu niepotrzebne zadania. Powyższy kod można by bardziej przejrzyście napisać w ten sposób:
MemoryStream ms =new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
byte[] PhotoByte =ms.ToArray();
Następnie poniższy kod nie używa parametrów. Zawsze, zawsze ZAWSZE parametryzuj zapytania SQL zamiast dynamicznie kompilować SQL. Nie, poważnie, zawsze. Tak, nawet wtedy. (Ponadto, czym jest Str
zmienny? Jakiś rodzaj ponownie użytej zmiennej instancji? Nie rób tego.)
Str = "insert into Experimmm Values('" + PhotoByte + "','" + textBox1.Text + "')";
Conn.Open();
cmd.Connection = Conn;
cmd.CommandText = Str;
cmd.ExecuteNonQuery();
Conn.Close();
Zamiast tego powinno wyglądać tak:
Conn.Open();
using(SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = "insert into Experimmm (column list) values(@data, @name)";
cmd.Parameters.Add("@data", SqlDbType.VarBinary).Value = PhotoByte;
cmd.Parameters.Add("@name", SqlDbType.VarChar, yourlength).Value = textBox1.Text;
cmd.ExecuteNonQuery();
}
Conn.Close();
Następnie przejdziemy do Twojego pobierania. Ponownie za pomocą Str
zmiennej, nie rób tego typu rzeczy. Musisz również sparametryzować to zapytanie.
byte[] data;
string name;
Conn.Open();
using(SqlCommand cmd = Conn.CreateCommand())
{
cmd.CommandText = "select column_list from Experimmm where id = @id";
cmd.Parameters.Add("@id", SqlDbType.VarChar, field_length).Value = textBox2.Text;
using(SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
data = (byte[])dr.GetValue(0);
name = (string)dr.GetValue(1);
}
}
}
Conn.Close();
label1.Text = name;
pictureBox2.Image = Image.FromStream(new MemoryStream(data));