Рейтинг:
2
OriginalGriff
Во-первых, когда вы делаете это в C#:
... select image from table1 where image='"+picturebox1.image"' ;
Он не добавляет изображение к выбранному. То, что вы получаете, - это строка:
... select image from table1 where image='System.Drawing.Bitmap'
Смотрите здесь почему:
Почему я получаю " параметр недопустим." исключение, когда я читаю изображение из своей базы данных?[
^]
Если вы использовали подобный код для вставки своих изображений в БД, то у меня есть для вас плохая новость: все они бесполезны. Ссылка показывает, как вам нужно сделать это правильно.
Это также подразумевает, что вы обычно строите SQL-команды следующим образом: не делайте этого. Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Я бы также предположил, что это плохая идея - сравнивать изображения непосредственно в SQL-это будет ужасно с точки зрения производительности.
Вместо этого генерируйте хэши и сравнивайте их - только одни и те же изображения хэш-значений должны быть непосредственно сопоставлены для равенства, экономя много времени и памяти, потребляющих сравнения.
Member 13349523
можете ли вы дать мне точный код для сравнения двух изображений? одно изображение из picture box, а другое из базы данных, потому что я хочу взять изображение в качестве входных данных и сравнить его с сохраненным изображением im db и распечатать какое-то утверждение.. я едва ударил в этом .. я не могу продолжать .. плз, ты можешь мне помочь, братан
OriginalGriff
Не делай этого так.
Проблема в том, что изображения довольно большие, и сравнение многих из них означает, что вы либо занимаете много времени SQL Server - если вы делаете это на SQL - либо большую пропускную способность - если вы делаете это на C# - потому что вам нужно вытащить каждое изображение из базы данных на свой компьютер, чтобы сравнить их. Это действительно неэффективно, и если у вас есть несколько пользователей, делающих это (а несколько пользователей - это весь смысл SQL Server в конце концов), то быстро наступает момент, когда все это прекращается для всех - вы эффективно разрабатываете свою личную DDOS-атаку на свои собственные системы!
Вместо этого сохраните дополнительное поле с вашим изображением (или два могут быть даже лучше), которые хранят один или два хэша: и, например, MD5 и SHA512. Вы вычисляете хеш-значение изображения, когда вы ВСТАВЛЯЕТЕ его в БД, и одновременно сохраняете хеш-значения. Затем, когда вы захотите его найти, вычислите хеш (а) для «нового» изображения и используйте SQL, чтобы найти только те, которые имеют идентичный хеш. Это быстро, потому что хэши (по определению) намного меньше, чем само изображение, но почти достаточно уникальны, чтобы большую часть времени вы возвращали только одно совпадение. Быстрое сравнение нескольких (или одного) изображения с подходящим хешем, и вы точно знаете, что это одно и то же изображение.
Member 13349523
спасибо за твои предложения, брат... я стараюсь работать над этим..
Member 13349523
можете ли вы сказать мне, как вычислить хэш для изображения?.
OriginalGriff
Гугл не работает сегодня?
https://www.google.co.uk/search?q=how+to+calculate+hash+for+an+image+c%23&oq=how+to+calculate+hash+for+an+image+c%23&aqs=chrome..69i57.5988j0j7&sourceid=chrome&ie=UTF-8