xdiet Ответов: 1

C# : как проверить/проверить, существует ли изображение уже в базе данных?


I use the code shown to try to validate my image. Unfortunately, I failed to do that and this is the first time I'm doing a validation for image. Is there anything wrong in my logic? Did I forgot something here? What's the right way in doing these. I hope someone would be able to help me thank you

System.IO.FileNotFoundException: 'Could not find file 'C:\Users\Andrea\source\repos\CapstoneSIMS\CapstoneSIMS\bin\Debug\72EF99A3668CF13820B113EB2E090C37716C9742'.' (I'M getting these error when i tried to insert image)

NOTE: I'm saving the image as image not path and also the datatype is `Varbinary(MAX)` in my database


Что я уже пробовал:

<pre lang="c#">
    public partial class ADDProduct : MetroForm
    {
        SIMSProduct _view;

        public ADDProduct(SIMSProduct _view)
        {
            InitializeComponent();
            this._view = _view;                  
        }

        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        byte[] photobyte;
        public string CalculateHash(string filename)
        {
            SHA1CryptoServiceProvider crypt = new SHA1CryptoServiceProvider();
            //MD5CryptoServiceProvider crypt = new MD5CryptoServiceProvider();
            string hash = string.Empty;
            using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                byte[] checksum = crypt.ComputeHash(fs);
                foreach (byte b in checksum)
                    hash += b.ToString("X2");
            }

            return (hash);
        }
    public static bool ImageExists(string filehash)
        {
            bool result = false;
            using (var connection = SQLConnection.GetConnection())
            {
                using (SqlCommand cmd = new SqlCommand("SELECT COUNT(0) FROM employee_product WHERE ImageHash = @ImageHash", connection))
                {
                    connection.Open();
                    int imagecount = (int)cmd.ExecuteScalar();
                    result = imagecount == 0;
                    connection.Close();
                }
            }

            return (result);
        }
        private void btn_add_Click(object sender, EventArgs e)
        {
            _view.ID = txt_id.Text;
            filehash = CalculateHash(@"C:\myimagefile.jpg");
            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
                {          
                    ValidateCode.IsValidCode(txt_code,lbl_code,ds);
                    string filehash = CalculateHash(pictureBox1.Tag.ToString());

                    if (lbl_code.Visible == true)
                    {
                        CustomNotifcation.Show("CODE ALREADY EXIST", CustomNotifcation.AlertType.error);
                        lbl_code.Visible = false;                      
                    }
                    else if (ImageExists(pictureBox1.Tag.ToString()))
                    {
                        MessageBox.Show("image exists");
                        return;
                    }
                    else
                    {
                         using (var select = new SqlCommand("Insert into employee_product (Image, ImageHash, 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("@ImageHash", SqlDbType.VarChar, 50);
                                select.Parameters["@ImageHash"].Value = filehash;
                                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)
        {
             var opnfd    = new OpenFileDialog();
            opnfd.Filter            = "Image Files (*.jpg;*.jpeg;.*.png;)|*.jpg;*.jpeg;.*.png;";
            opnfd.Title             = "Select Item";

            if (opnfd.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.SizeMode    = PictureBoxSizeMode.StretchImage;
                pictureBox1.Image       = Image.FromFile(opnfd.FileName);
                CalculateHash(opnfd.FileName);
            }
        }
    }

1 Ответов

Рейтинг:
1

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, VS покажет вам строку, в которой она обнаружила проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


xdiet

Уже обновил свой вопрос для этого

OriginalGriff

Таким образом, ваша ошибка теперь "System.IO.FileNotFoundException: 'не удалось найти файл 'C:\Users\Andrea\source\repos\CapstoneSIMS\CapstoneSIMS\bin\Debug\72EF99A3668CF13820B113EB2E090C37716C9742'.'"

Хорошо, что это довольно очевидно, не так ли? :смеяться:
Три возможности:
1) файл не существует. Вы ведь проверили, да?
2) Вы забыли расширение, когда пытались его открыть.
3) Он есть, но в другой системе, поэтому к нему нельзя получить доступ.

Опять же, мы не можем ничего проверить!

xdiet

Ну, ваш ответ не отвечает на мой вопрос, вы просто уточняете его

OriginalGriff

Это потому, что, как я уже сказал, Мы не можем смотреть на вашу систему, ваши данные и ваш код, пока он работает - только вы можете это сделать!
И это именно то, что нужно здесь: смотреть на систему, данные и код с помощью отладчика.

Подумайте об этом так: ваша машина ломается в середине нигде. Вы можете отправить сообщение в гараж, но это все, что у вас есть. Как они могут "слышать", как звучит двигатель? Видишь дым, идущий сзади? Проверить давление в шинах? Могут ли они открутить воздушный фильтр?

Иногда единственный человек, который может решить проблему, - это вы, потому что только у вас есть доступ к информации.