2013-03-20 50 views
11

正在寻找使用节约,需要在此post保存字节数组中的SQL Server

所以我应该在SQL Server中使用的数据类型来保存字节数组使用字节数组作为密码的方法?以及如何使用SqlCommand传递和检索字节数组?

回答

19

如果它总是将是相同的长度,然后binary(length)将是合适的。如果长度不同,请使用varbinary(maxlength)

binary and varbinary

而且,正如@ p.s.w.g所说,通过将它放在合适的参数中从代码传递它。

+0

+1是的。究竟。 – 2013-03-20 08:06:11

+1

对我来说,我需要'varbinary(max)' – 2016-06-02 17:29:14

3

只需使用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 
+0

使用二进制sql数据类型可以吗?正如我GOOGLE了一些人告诉它用于像图像这样的大二进制文件,你是否同意这一点? – user2155873 2013-03-20 08:02:28

+0

@ user2155873使用'VARBINARY(MAX)'来处理较大或长度不一的文件。对于密码哈希,使用'BINARY(32)'(或无论你的哈希长是多少)。 – 2013-03-20 08:04:32

+1

@ user2155873 - 假设你可以声明一个'binary(5)',为5个字节分配存储空间,你会说这只适合存储一个大文件吗? – 2013-03-20 08:04:48

0

不知道这是多大年纪,但我建议nvarchar(45)和Base64 32字节的字符串。这是保存散列的标准方式。 或者,您可以执行nvarchar(64)并将其存储为十六进制字符串。

相关问题