【发布时间】:2018-05-30 07:53:29
【问题描述】:
我的 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 持有不同的值,而不是上面那个?
让我知道我哪里出错了?
【问题讨论】:
-
"strID 持有不同的值" - 也发布该字符串。
-
你的 dr["ID"] 和 strID 的值是多少?
-
我的 StrID 值为:"ACk1MzE4QzFCNC1GOUNCLTQ0"
-
在 sql 中您会看到 base-16 字符串,但在 c# 中您正在从 db 读取字节数组并转换为 base-64 字符串。为什么你会期望它们是一样的?
-
首先,您在 SQL 语句中使用了
NEWID(),因此您总是会创建不同的值。其次,在您的 C# 中,您将转换为 base64 编码的字符串。因此,对于源字符串和 base64 编码字符串,您永远不会得到相同的结果。第三,当您提供strID时,您似乎转换了不同的结果。0x002936354446393642302D333936312D3436的实际 base64 值为ACk2NURGOTZCMC0zOTYxLTQ2。第四,您的 varbinary 以 0x00 开头,因此将其转换为字符串将导致字符串以\0终止符字符开头。
标签: c# sql sql-server sql-server-2012