C # Как проверить, если изображение Picturebox уже существует в базе данных - PullRequest
0 голосов
/ 16 сентября 2018

Ниже этого кода я пытаюсь проверить, существует ли мое изображение в виде картинки в базе данных.Чтобы быть более точным, если пользователь попытается вставить то же изображение, он подтвердит, что «Изображение уже существует»

Вот ошибка, которую я получил:

(Параметризованный запрос '(@Imagevarbinary (8000)) Выберите COUNT (*) из employee_product, который ожидает параметр '@Image', который не был предоставлен. ')

Что я здесь не так делаю?или я что то забыл?Я надеюсь, что кто-то сможет мне помочь.Спасибо

public partial class ADDProduct : MetroForm
{
    SIMSProduct _view;
    public ADDProduct(SIMSProduct _view)
    {
        InitializeComponent();
        this._view = _view;                 
    }
    DataTable dt = new DataTable();
    byte[] photobyte;
    string date = DateTime.Now.ToString("MMMM-dd-yyyy");
    public void ValidateImage(byte[] image)
    {
        using (var con = SQLConnection.GetConnection())
        {
                using (var select = new SqlCommand("Select COUNT(*) from employee_product where Image= @Image", con))
                {

                select.Parameters.Add("@Image", SqlDbType.VarBinary).Value = photobyte;
                    using (var sda = new SqlDataAdapter(select))
                    {
                        int count = (int)select.ExecuteScalar();
                        if (count > 0)
                        {
                            lbl_image.Show();
                        }
                    }
                }
        }          
    }
 private void btn_add_Click(object sender, EventArgs e)
    {
        _view.ID = txt_id.Text;
        using (var con = SQLConnection.GetConnection())
        {
            if (string.IsNullOrEmpty(cbox_supplier.Text) || string.IsNullOrEmpty(txt_code.Text) || string.IsNullOrEmpty(txt_item.Text) || string.IsNullOrEmpty(txt_quantity.Text) || string.IsNullOrEmpty(txt_cost.Text) || pictureBox1.Image == null )
            {
                CustomNotifcation.Show("Please input the required fields", CustomNotifcation.AlertType.warning);
            }
            else
            {
                ValidateItem.IsValidItem(txt_code, lbl_code);
                ValidateImage(photobyte);
                if (lbl_code.Visible == true)
                {
                    CustomNotifcation.Show("CODE ALREADY EXIST", CustomNotifcation.AlertType.error);
                    lbl_code.Visible = false;
                }
                else if (lbl_image.Visible == true)
                {
                    CustomNotifcation.Show("IMAGE ALREADY EXIST", CustomNotifcation.AlertType.error);
                    lbl_image.Visible = false;
                }
                else
                {
                    using (var select = new SqlCommand("Insert into employee_product (Image, ID, Supplier, Codeitem, Itemdescription, Date, Quantity, Unitcost) Values (@Image,@ID, @Supplier, @Codeitem, @Itemdescription, @Date, @Quantity, @Unitcost)", con))
                    {
                        var ms = new MemoryStream();
                        pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
                        photobyte = ms.GetBuffer();

                        select.Parameters.Add("@Image", SqlDbType.VarBinary).Value = photobyte;
                        select.Parameters.Add("@ID", SqlDbType.VarChar).Value = txt_id.Text;
                        select.Parameters.Add("@Supplier", SqlDbType.VarChar).Value = cbox_supplier.Text;
                        select.Parameters.Add("@Codeitem", SqlDbType.VarChar).Value = txt_code.Text.Trim();
                        select.Parameters.Add("@Itemdescription", SqlDbType.VarChar).Value = txt_item.Text.Trim();
                        select.Parameters.Add("@Date", SqlDbType.VarChar).Value = date;
                        select.Parameters.Add("@Quantity", SqlDbType.Int).Value = txt_quantity.Text.Trim();
                        select.Parameters.Add("@Unitcost", SqlDbType.Int).Value = txt_cost.Text.Trim();
                        select.ExecuteNonQuery();
                        CustomMessage.Show("Message: Item successfully added!", CustomMessage.Messagetype.Success);
                        pictureBox1.Image = null;
                        cbox_supplier.Items.Clear();
                        txt_code.Clear();
                        txt_item.Clear();
                        txt_quantity.Clear();
                        txt_cost.Clear();
                        _view.btn_update.Enabled = false;
                        _view.AddingProduct();
                        this.Close();
                    }
                }                
            }                
        }
    }
    private void pictureBox1_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog ofd = new OpenFileDialog())
        {
            ofd.Filter = "Image Files (*.jpg;*.jpeg;.*.png;)|*.jpg;*.jpeg;.*.png;";
            ofd.FilterIndex = 1;
            ofd.Multiselect = false;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                pictureBox1.Image = Image.FromFile(ofd.FileName);

            }
        }
    }
 }

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете сгенерировать некоторые уникальные значения для файла, такие как хэш или контрольная сумма, и сохранить его вместе с потоком байтов в БД, который можно использовать для проверки того, существует файл или нет. Обычно эти механизмы не используются для этого. Это работает, только если содержимое файла точно такое же. Даже малейшее изменение не сможет определить совпадение.

Вы можете найти хеш как строковый хеш:

using(SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
    hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
}

ИЛИ, в качестве альтернативы, вы можете решить сохранить некоторую альтернативную информацию, как мы обычно делаем. Как имя файла или пользовательские проверки, чтобы проверить, существует ли файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...