将字节数组插入SQL Server数据库表

时间:2012-11-10 16:48:26

标签: c# asp.net sql-server

我正在使用PBKDF2散列算法来生成密码,该算法根据用户提供的密码生成字节数组,如下所示:

var DeriveBytes = new Rfc2898DeriveBytes(_Password, 20);
byte[] _Salt = DeriveBytes.Salt;
byte[] _Key = DeriveBytes.GetBytes(20);  // derive a 20-byte key

我想将这些保存到我的数据库中,但我不确定要使用哪种数据类型。从我所看到的,没有用于字节数组的数据类型,我很确定我不能只将其转换为字符串并将其与varchar一起存储,或者我可以吗?

2 个答案:

答案 0 :(得分:7)

binaryvarbinary几乎是明确设计用于存储字节数组。

MSDN link

答案 1 :(得分:0)

您可以将SQL表中的列定义为binaryvarbinary,然后使用需要SqlDbType参数的重载之一将其添加到ado命令对象的parameter属性中传达这是一个二进制值。

选项2:

您将SQL表中的列定义为nvarchar(max),将您的字节数组转换为基数为64的字符串,即System.Convert.ToBase64String(mybytes)。什么时候从数据库中检索它,

mybytes = System.Convert.FromBase64String((byte[])dr[i]);