Сохранение массива байтов в sql server

Я хочу использовать подход к сохранению паролей, который требует использования массива байтов, как в этом в должности

Итак, какой тип данных я должен использовать в sql server для сохранения массива байтов? и как я могу передать и получить массив байтов с помощью SqlCommand?

3 ответов


если он всегда будет одинаковой длины, то binary(length) было бы подходящим. Если он будет отличаться по длине, используйте varbinary(maxlength).

Binary и varbinary.

и, как @p.s.w.g говорит, что вы передаете его из кода, помещая его в подходящий параметр.


просто использовать byte[] так же, как и любой другой параметр, задание SqlDbType.Binary в качестве типа параметра. Вот пример в C#

// Generate your password hash some way
byte[] passwordHash = new byte[] { 0x0, 0x1, 0x2 ... };

...

command.Parameters.Add("@passwordHash", SqlDbType.Binary);
command.Parameters["@passwordHash"].Value = passwordHash;

или если вы предпочитаете VB.NET

' Generate your password hash some way
Dim passwordHash As Byte() = New Byte() { &H0, &H1, &H2 ... }

...

command.Parameters.Add("@passwordHash", SqlDbType.Binary)
command.Parameters("@passwordHash").Value = passwordHash

Не знаю, сколько лет это, но я бы рекомендовал nvarchar (45) и Base64 ваши 32 байта в строку. Это стандартный способ сохранения хэша. В качестве альтернативы вы можете сделать nvarchar (64) и сохранить его как шестнадцатеричную строку.