Я хочу отправить большое количество данных из C# в мою базу данных вместе с вычисленной контрольной суммой в качестве последнего значения, которое следует сравнить с тем, что хранимая процедура SQL Server будет вычисляться из этих значений.Сравнение созданной C# контрольной суммы с SQL Server 1
Для этого я пробовал много разных способов, таких как встроенный метод SQL Checksum
и разные хешинговые элементы, но либо C#, либо SQL вычисляют другое значение, или хеширование не работает с nvarchars и целыми числами (fx. MD5 хеширование), которое требуется для меня.
Неужели кому-нибудь действительно удалось это сделать или знать как?
Ссылка на нашу неудачную попытку MD5: SQL Server HASHBYTES conversion inconsistency?
здесь, вычисленный результат отличается от C# один, когда он использует nvarchars
метод хэширования:
Set @result = convert(nvarchar(32), hashbytes('MD5', @DataID + @Data1 + @Data2 + @Data3), 2)
Кроме того, когда вы дать методу хеширования целое число как параметр (например, DataID), он жалуется:
"Тип данных аргумента e int недопустим для аргумента 2 функции hashbytes. "
Скорее всего, если текст задействован, есть разница с сортировкой и кодировкой. В любом случае вы должны опубликовать код. Поместите некоторый код SQL и некоторый код C#, который вычисляет контрольную сумму одних и тех же вещей, а затем публикует сгенерированные контрольные суммы. До тех пор, пока вы это сделаете, самое большее вы получите «Ну, это слишком плохо». –
HASHBYTES() поддерживает MD5 и работает с nvarchar и любым другим типом при преобразовании в varbinary, C# может сделать то же самое, в чем проблема, с которой вы столкнулись? –
добавил ссылку на сообщение моих друзей с кодом SQL. При использовании Nvarchars он не вычисляет то же, что и хеширование C#, и не принимает целые числа. Мы будем проверять оба потока для ответов регулярно. –