Извлечение изображения из Sql, «Параметр недействителен»

#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"));