Ответ 1
Если он всегда будет иметь одинаковую длину, тогда будет пригодна binary(length)
. Если он будет меняться по длине, используйте varbinary(maxlength)
.
И, как говорит @pswg, вы передаете его из кода, помещая его в подходящий параметр.
Я хочу использовать подход при сохранении паролей, который требует использования массива байтов, как в этом сообщении
Итак, какой тип данных я должен использовать в sql-сервере для сохранения массива байтов? и как я могу передать и получить массив байтов, используя SqlCommand?
Если он всегда будет иметь одинаковую длину, тогда будет пригодна binary(length)
. Если он будет меняться по длине, используйте varbinary(maxlength)
.
И, как говорит @pswg, вы передаете его из кода, помещая его в подходящий параметр.
Просто используйте byte[]
же, как и любой другой параметр, указав SqlDbType.Binary
в качестве типа параметра. Здесь образец в С#
// 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) и сохранить его как шестую строку.