尝试从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#中没有二进制等价物?
在此先感谢。
答
我无法获得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。
编辑:
信用卡/详细信息:
答
如果是SQL唯一标识符,那么C#相当于是一个GUID。
它已经是二进制的。你不需要转换它,你不需要它周围的引号。只需使用二进制类型参数而不是varchar。 – Jim 2015-04-01 17:51:26
我想吉姆说的是你可以做这样的事情'声明@id binary(16)= 0x6EC5CAE61DF38840B8EFEC2D5A158B3A'。注意二进制数据周围没有引号。 – dana 2015-04-01 17:54:40
是的,Dana说什么:) – Jim 2015-04-01 17:55:28