尝试从C#字符串转换为SQL二进制

问题描述:

我正在构建一个需要在我们的SQL Server数据库中使用二进制(16)唯一标识符的c#应用程序。目前,应用程序将它们存储为一个字符串。尝试从C#字符串转换为SQL二进制

我希望能够将唯一的id作为字符串传递到varchar参数并在sql语句内进行转换,但我得到了一些奇怪的结果。

CONVERT(binary(16), '0x6EC5CAE61DF38840B8EFEC2D5A158B3A', 1) 
    --desired: 0x6EC5CAE61DF38840B8EFEC2D5A158B3A 
    --actual: 0x307836454335434145363144463338383430423845464543324435413135 

有什么方法可以用这种方式转换它吗?这是我在各个地方找到的解决方案,但是我一直无法实现。我也尝试了一些其他的建议:

CONVERT(binary(16), '0x6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3]) 
    CONVERT(varbinary(16), '0x6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3]) 
    CONVERT(binary(16), '6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3]) 
    CONVERT(varbinary(16), '6EC5CAE61DF38840B8EFEC2D5A158B3A', [1-3]) 
    CAST('' AS XML).value('sql:variable("@Variable")', 'binary(16)') 

无济于事。

我可以在我的应用程序中以不同方式存储这些内容,如果这是可取的,但我不确定要使用哪种数据类型?据我所知,在C#中没有二进制等价物?

在此先感谢。

+0

它已经是二进制的。你不需要转换它,你不需要它周围的引号。只需使用二进制类型参数而不是varchar。 – Jim 2015-04-01 17:51:26

+0

我想吉姆说的是你可以做这样的事情'声明@id binary(16)= 0x6EC5CAE61DF38840B8EFEC2D5A158B3A'。注意二进制数据周围没有引号。 – dana 2015-04-01 17:54:40

+0

是的,Dana说什么:) – Jim 2015-04-01 17:55:28

我无法获得uniqueidentifier示例工作,但同事指出的解决方案似乎工作。

DECLARE @id varchar(max) 
    DECLARE @idNew binary(16) 
    SET @id = '0x6EC5CAE61DF38840B8EFEC2D5A158B3A' 
    SET @idNew = cast('' as xml).value('xs:hexBinary(substring(sql:variable("@id"), 3))', 'varbinary(max)') 

    select @idNew 

我完全理解xQuery是如何工作的,但这似乎是正确转换它。使用此功能,我可以将c#字符串传递给@id变量,在sql语句中转换并使用@idNew。

编辑:

信用卡/详细信息:

http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

如果是SQL唯一标识符,那么C#相当于是一个GUID。