Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将原始二进制值恢复为字符串_C#_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

C# 如何将原始二进制值恢复为字符串

C# 如何将原始二进制值恢复为字符串,c#,sql,sql-server,sql-server-2012,C#,Sql,Sql Server,Sql Server 2012,我的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列名 0x0029363354446393642302D333936312D343

我的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列名

0x0029363354446393642302D333936312D3436

我需要指定一个变量作为我试图转换为 字符串,但我得到不同的值

foreach (DataRow dr in dt.Rows)
{
    byte[] bytes = (byte[])dr["ID"];
    string strID = Convert.ToBase64String(bytes, 0, bytes.Length);
}
按我的字符串strID持有不同的值,而不是上面的值


告诉我哪里出错了?

您正在将字节转换为Base64字符串,而0x002。。是字节的十六进制表示形式

若在c代码中不强制转换字符串,请尝试在SQL select语句中选择转换字符串

select convert(varchar(max), @ID, 1) as  ID
有关Convert中第三个参数的详细信息,请参阅此链接

编辑:

此外,在c语言中,您需要将字节数组转换为十六进制字符串。已提供将字节数组转换为十六进制字符串的答案。 一个功能从该链接发布

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();
}

您正在将字节转换为Base64字符串,而0x002。。是字节的十六进制表示形式

若在c代码中不强制转换字符串,请尝试在SQL select语句中选择转换字符串

select convert(varchar(max), @ID, 1) as  ID
有关Convert中第三个参数的详细信息,请参阅此链接

编辑:

此外,在c语言中,您需要将字节数组转换为十六进制字符串。已提供将字节数组转换为十六进制字符串的答案。 一个功能从该链接发布

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();
}

strID持有不同的值-也张贴该字符串。dr[ID]和strID中的值是什么?我的strID值是:ACK1MZE4QZFC1C1GOUNCLTQ0在sql中,您看到的是base-16字符串,但在c中,您从db读取字节数组并转换为base-64字符串。为什么期望它们是相同的?首先,在SQL语句中使用NEWID,因此总是创建不同的值。其次,在C语言中,您将转换为base64编码的字符串。因此,对于源字符串和base64编码字符串,您永远不会得到相同的结果。第三,当你给出你的strID时,你似乎转换了一个不同的结果。0x0029363354446393642302D333936312D3436的实际base64值将为ACk2NURGOTZCMC0zOTYxLTQ2。第四,您的varbinary以0x00开头,因此将其转换为字符串将导致以\0终止符开头的字符串。strID持有不同的值-也发布该字符串。您的dr[ID]和strID中的值是什么?我的strID值是:Ack1Mze4QZFcnc1GounctQ0在sql中看到base-16字符串,但在c中,您正在从db读取字节数组并转换为base-64字符串。为什么期望它们是相同的?首先,在SQL语句中使用NEWID,因此总是创建不同的值。其次,在C语言中,您将转换为base64编码的字符串。因此,对于源字符串和base64编码字符串,您永远不会得到相同的结果。第三,当你给出你的strID时,你似乎转换了一个不同的结果。0x0029363354446393642302D333936312D3436的实际base64值将为ACk2NURGOTZCMC0zOTYxLTQ2。第四,varbinary以0x00开头,因此将其转换为字符串将导致字符串以\0终止符开头。