如何在sql server中base64编码一个guid

时间:2012-02-07 14:43:50

标签: sql-server base64 guid

如何在sql server 2005中使用uniqueidentifier数据类型重新创建以下c#代码。

string encoded = Convert.ToBase64String(guid.ToByteArray());

我尝试过在互联网上遇到的几个例子,例如http://www.vbforums.com/showthread.php?t=554886,但它们都返回比.net函数更长的字符串。

3 个答案:

答案 0 :(得分:3)

如果您传入uniqueidentifier

,则链接中的示例有效
Guid guid = Guid.NewGuid();
string encoded = Convert.ToBase64String(guid.ToByteArray());
Console.WriteLine(guid);
Console.WriteLine(encoded);

代表

32705fe3-cedd-4bfd-a881-9dd11e543f9e
419wMt3O/UuogZ3RHlQ/ng==

并且

declare @guid uniqueidentifier = '32705fe3-cedd-4bfd-a881-9dd11e543f9e'
select dbo.f_BinaryToBase64(@guid)

419wMt3O/UuogZ3RHlQ/ng==

答案 1 :(得分:1)

我的指南是在nvarchar(MAX)列中,名为“#guid'看起来像这样

 {4A449FE1-8989-4D69-935C-9E918244DEED}

采取一些步骤即显示我的工作。我在我的表guidreal,guidbinary,guidbase64中添加了三列。我意识到这可以压缩: - )。

1

update [Database].[dbo].[LotofRecords]
set guidreal =  Cast(Replace(Replace([guid],'{',''),'}','') AS UNIQUEIDENTIFIER)

2

update [Database].[dbo].[LotofRecords]
set guid_binary =  cast(guidreal as VARBINARY(MAX))

3

update [Database].[dbo].[LotofRecords]
set guidBase64 =   cast(N'' as XML).value(
              'xs:base64Binary(xs:hexBinary(sql:column("guid_binary")))'
              ,'nvarchar(25)'
              )

给了我

4Z9ESomJaU2TXJ6RgkTe7Q==

使用

解码回varbinary
select cast(N'' as XML).value(
              'xs:base64Binary(sql:column("guidbase64"))'
              ,'varbinary(max)'
              )
              ,guid_binary
from
 [Database].[dbo].[LotofRecords]

答案 2 :(得分:0)

我可能错了,但我认为这是不可能的。 C#侧的算法与您在sql part中找到的任何组合都不同。


要解决这个问题,我建议一方做所有事情。即:从c#端填充数据库或在sql部分中执行所有操作。