#c# #sql-server #winforms
#c# #sql-сервер #winforms
Вопрос:
Я не могу получить изображение с sql server.
«Параметр недопустим»
Извлечение кода изображения
SqlConnection con = new SqlConnection(connectionString);
con.Open();
SqlCommand cmd = new SqlCommand("select [image] from employee where empcode = 0067", con);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
if (reader.HasRows)
{
byte[] img = (byte[])(reader["image"]);
if (img == null)
pictureBox1.Image = null;
else
{
MemoryStream ms = new MemoryStream(img);
pictureBox1.Image = Image.FromStream(ms);
}
}
Выберите код изображения
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Images(.jpg,.png)|*.png;*.jpg";
ofd.Title = "Select Employee Picture";
if (ofd.ShowDialog() == DialogResult.OK)
{
imagefilePath = ofd.FileName.ToString();
pictureBox1.Image = Image.FromFile(ofd.FileName);
}
Вставить код изображения
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] a = ms.GetBuffer();
ms.Close();
String query = "INSERT INTO employee ([empcode],[fullname],[fathername],[cnic],[empAddress],[phone],[dateofBirth],[department],[designation],[salary],[dateofJoining],[status],[workingTime],[image]) values (@d1,@d2,@d3,@d4,@d5,@d6,@d7,@d8,@d9,@d10,@d11,@d12,@d13,@img)";
cmd = new SqlCommand(query, con);
cmd.Parameters.Add(new SqlParameter("@d1", SqlDbType.VarChar, 30, "empcode"));
cmd.Parameters.Add(new SqlParameter("@d2", SqlDbType.VarChar, 30, "fullname"));
cmd.Parameters.Add(new SqlParameter("@d3", SqlDbType.VarChar, 30, "fathername"));
cmd.Parameters.Add(new SqlParameter("@d4", SqlDbType.VarChar, 30, "cnic"));
cmd.Parameters.Add(new SqlParameter("@d5", SqlDbType.VarChar, 30, "empAddress"));
cmd.Parameters.Add(new SqlParameter("@d6", SqlDbType.VarChar, 30, "phone"));
cmd.Parameters.Add(new SqlParameter("@d7", SqlDbType.VarChar, 30, "dateofBirth"));
cmd.Parameters.Add(new SqlParameter("@d8", SqlDbType.Int, 30, "department"));
cmd.Parameters.Add(new SqlParameter("@d9", SqlDbType.Int, 30, "designation"));
cmd.Parameters.Add(new SqlParameter("@d10", SqlDbType.Int, 30, "salary"));
cmd.Parameters.Add(new SqlParameter("@d11", SqlDbType.VarChar, 30, "dateofJoining"));
cmd.Parameters.Add(new SqlParameter("@d12", SqlDbType.VarChar, 30, "status"));
cmd.Parameters.Add(new SqlParameter("@d13", SqlDbType.VarChar, 30, "workingTime"));
cmd.Parameters["@d1"].Value = edtEmpCode.Text;
cmd.Parameters["@d2"].Value = edtFullname.Text;
cmd.Parameters["@d3"].Value = edtFatherName.Text;
cmd.Parameters["@d4"].Value = edtCnic.Text;
cmd.Parameters["@d5"].Value = edtAddress.Text;
cmd.Parameters["@d6"].Value = edtPhone.Text;
cmd.Parameters["@d7"].Value = dateofBirth.Text;
cmd.Parameters["@d8"].Value = dropdownDepartment.SelectedValue;
cmd.Parameters["@d9"].Value = dropdownDesignation.SelectedValue;
cmd.Parameters["@d10"].Value = edtSalary.Text;
cmd.Parameters["@d11"].Value = appointmentDate.Text;
cmd.Parameters["@d12"].Value = "Active";
cmd.Parameters["@d13"].Value = workingTime.Text;
cmd.Parameters.AddWithValue("@img",a);
cmd.ExecuteNonQuery();
Пожалуйста, укажите какое-нибудь допустимое решение.
Комментарии:
1. Вы уверены, что все параметры должны быть
varchar
, а неnvarchar
? И все они имеют длину 30 символов? Можете ли вы показать намCREATE TABLE
скрипт для таблицы?2.
SqlDbType.Int, 30,
Как вы думаете, что это30
означает?3.
cmd.Parameters.AddWithValue("@img",a)
вероятно, это тоже плохая идея. Какой тип будет ADO.NET вывод?binary
,varbinary
илиvarbinary(max)
?4. MemoryStream ms = новый MemoryStream (img); pictureBox1.Image = изображение. FromStream (ms);
5.
MemoryStream ms = new MemoryStream(img); pictureBox1.Image = Image.FromStream(ms);
Какая из этих строк кода конкретно вызывает исключение?
Ответ №1:
Я думаю, вам нужно передать параметр image, как показано ниже, при вставке его в базу данных, а также убедиться, что тип данных вашего столбца image в таблице — image.
cmd.Parameters.Add(new SqlParameter("@img", SqlDbType.Image,0, "column name"));