我的SQL查询返回如下的值
Declare @ID varbinary(18)
Declare @newReturnID NvarCHAR(100)
set @ID = CONVERT(VARBINARY(18), CONVERT(VARCHAR(2), CONVERT(VARBINARY(2), 41)) + CONVERT(VARCHAR(64), NEWID()))
select @ID ID
ID(列名)
0x002936354446393642302D333936312D3436
我需要将一个变量分配为我想要转换为上面的值 字符串,但我得到一个不同的值?
foreach (DataRow dr in dt.Rows)
{
byte[] bytes = (byte[])dr["ID"];
string strID = Convert.ToBase64String(bytes, 0, bytes.Length);
}
通过我的字符串strID保存不同的值,而不是上面的那个?
让我知道我哪里出错了?
答案 0 :(得分:2)
您正在将字节转换为Base64字符串,而0x002 ..是字节的十六进制表示。
如果在c#代码中转换字符串不是必须的,请尝试在SQL select语句中选择转换字符串。
select convert(varchar(max), @ID, 1) as ID
请参阅此链接(Binary Style),了解Convert
中第3个参数的详细信息。
修改强>
此外,在c#中,您需要将字节数组转换为十六进制字符串。 here已经可用于将字节数组转换为十六进制字符串。 从该链接发布一个功能。
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}