8

我有一个要存储在数据库中的 128 位密钥。我的代码创建密钥 asbyte[16]和数据库中的数据类型是varbinary(16).

当我尝试再次从数据库中检索字节数组时,我没有得到原始值。

这是我的代码:

byte[] test =  new byte[16]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

SqlCommand myInsertCmd = new SqlCommand("INSERT INTO Test(test) VALUES(@Param)", myConnection);       
SqlParameter param = myInsertCmd.Parameters.Add("@Param", SqlDbType.VarBinary, 16);
param.Value = test;

myInsertCmd.ExecuteNonQuery();

SqlDataAdapter myAdapter1 = new SqlDataAdapter("Select test from Test;", myConnection);
DataTable dt = new DataTable();
myAdapter1.Fill(dt);

foreach (DataRow row in dt.Rows)
{
    char[] charArray = row["test"].ToString().ToCharArray();
}

对于charArray,我得到 0x0053、0x0079,0x0073,0x0074 等,而且charArray只有 13 个字节长。我究竟做错了什么?

4

1 回答 1

15

row["Test"]包含byte[],因此row["Test"].ToString()返回类型的默认值ToStringbyte[]"System.Byte[]". 之后您转换System.Byte[]并获得该结果

foreach (DataRow row in dt.Rows)
{
    byte[] byteArray = (byte[])row["test"];
}
于 2012-12-19T12:17:56.070 回答