आपको अपने कोड के साथ कई समस्याएं हैं। मैं इसे पंक्ति-दर-पंक्ति संबोधित करूंगा:
MemoryStream ms =new MemoryStream();
byte[] PhotoByte=null;
PhotoByte=ms.ToArray();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
PhotoByte =ms.ToArray();
जबकि यह कोई समस्या नहीं है, आपके पास यहां अनावश्यक कार्य हैं। ऊपर दिए गए कोड को इस तरह से अधिक स्पष्ट रूप से लिखा जा सकता है:
MemoryStream ms =new MemoryStream();
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
byte[] PhotoByte =ms.ToArray();
अगला, निम्न कोड पैरामीटर का उपयोग नहीं कर रहा है। हमेशा, हमेशा, हमेशा SQL को गतिशील रूप से बनाने के बजाय अपनी SQL क्वेरी को पैरामीटराइज़ करें। नहीं, गंभीरता से, हमेशा। हाँ, तब भी। (साथ ही, Str
क्या है चर? किसी प्रकार का पुन:उपयोग किया गया उदाहरण चर? ऐसा मत करो।)
Str = "insert into Experimmm Values('" + PhotoByte + "','" + textBox1.Text + "')";
Conn.Open();
cmd.Connection = Conn;
cmd.CommandText = Str;
cmd.ExecuteNonQuery();
Conn.Close();
इसके बजाय, यह होना चाहिए:
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();
इसके बाद, हम आपकी पुनर्प्राप्ति पर आगे बढ़ेंगे। फिर से Str
. के साथ परिवर्तनशील, इस प्रकार का कार्य न करें। साथ ही, आपको इस क्वेरी को भी पैरामीटराइज़ करने की आवश्यकता है।
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));