Vin*_*ent 3 c# firebird uuid guid firebird2.5
我正在使用带有UUID的Firebird数据库作为主键但我遇到了以下问题:
我的C#应用程序中相同Guid的文本表示与数据库的不同.我正在使用UUID_TO_CHAR函数和我的C#应用程序中的数据库中获取文本表示Guid.ToString().
区别在于Firebird数据库解释UUID与.net框架的方式,我相信他们用不同的字节顺序读取它们
例如,数据库中的guid如下所示:
FADE3E40-6227-5B40-BBB9-8492859EBA66
Run Code Online (Sandbox Code Playgroud)
我的C#应用程序中的相同guid看起来像这样:
403edefa-2762-405b-bbb9-8492859eba66
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的数据库中显示它们与在C#中显示的方式相同.或相反亦然?
有没有办法在从数据库中获取它们并将它们放入数据库时进行转换,因此我不必在任何地方使用格式?
要获得与firebird相同的表示形式 - 将guid的所有字节转换为十六进制:
BitConverter.ToString(guid.ToByteArray()).Replace("-", "")
Run Code Online (Sandbox Code Playgroud)
如有必要,您可以选择在组之间添加" - ",例如:
static class Extensions {
public static string ToFirebirdString(this Guid guid) {
var raw = BitConverter.ToString(guid.ToByteArray()).Replace("-", "");
return $"{raw.Substring(0, 8)}-{raw.Substring(8, 4)}-{raw.Substring(12,4)}-{raw.Substring(16, 4)}-{raw.Substring(20)}";
}
}
Run Code Online (Sandbox Code Playgroud)