Comment puis-je recréer le code c # suivant avec un type de données uniqueidentifier dans sql server 2005.
ssortingng encoded = Convert.ToBase64Ssortingng(guid.ToByteArray());
J'ai essayé plusieurs exemples que je suis tombé sur l'Internet tels que http://www.vbforums.com/showthread.php?t=554886 mais ils returnnent tous des strings plus longues que la fonction .net.
L'exemple de votre lien fonctionne si vous passez un identificateur unique
Guid guid = Guid.NewGuid(); ssortingng encoded = Convert.ToBase64Ssortingng(guid.ToByteArray()); Console.WriteLine(guid); Console.WriteLine(encoded);
pour
32705fe3-cedd-4bfd-a881-9dd11e543f9e 419wMt3O/UuogZ3RHlQ/ng==
Et
declare @guid uniqueidentifier = '32705fe3-cedd-4bfd-a881-9dd11e543f9e' select dbo.f_BinaryToBase64(@guid)
pour
419wMt3O/UuogZ3RHlQ/ng==
Je peux me tromper mais je pense que ce n'est pas possible. L'algorithm du côté C # est différent de la combinaison que vous pouvez find dans la partie sql.
Pour résoudre ce problème, je recommand de tout faire d'un seul côté. c'est-à-dire: remplir le db du côté c # ou tout faire dans la partie sql.
mon guid était dans une colonne nvarchar (MAX) nommée 'guid' et ressemblait à ceci
{4A449FE1-8989-4D69-935C-9E918244DEED}
Prendre quelques étapes c'est-à-dire montrer mon travail. J'ai ajouté trois colonnes à ma table guidreal, guidbinary, guidbase64. Je réalise que cela peut être compressé :-).
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)' )
ce qui m'a donné
4Z9ESomJaU2TXJ6RgkTe7Q==
décoder en return à varbinary en utilisant
select cast(N'' as XML).value( 'xs:base64Binary(sql:column("guidbase64"))' ,'varbinary(max)' ) ,guid_binary from [Database].[dbo].[LotofRecords]