Guid.Tostring() 在我的数据库中给出了与 UUID_TO_CHAR 不同的表示
Guid.Tostring() gives a different representation than UUID_TO_CHAR in my database
我正在使用以 UUID 作为主键的 Firebird 数据库,但我 运行 遇到了以下问题:
我的 C# 应用程序中同一 Guid 的文本表示与数据库中的不同。我在数据库中使用 UUID_TO_CHAR
函数获取文本表示,在我的 C# 应用程序中使用 Guid.ToString()
.
不同之处在于 Firebird 数据库解释 UUID 与 .net 框架的方式不同,我相信他们用 different byte ordering
来阅读它们
例如,数据库中的 guid 如下所示:
FADE3E40-6227-5B40-BBB9-8492859EBA66
我的 C# 应用程序中的相同 guid 如下所示:
403edefa-2762-405b-bbb9-8492859eba66
有没有一种方法可以像在 C# 中一样在我的数据库中显示它们。或者反之亦然?
有没有办法在从数据库中获取它们并将它们放入数据库时进行转换,这样我就不必在任何地方使用格式了?
要获得与 firebird 中相同的表示形式 - 将 guid 的所有字节原样转换为十六进制:
BitConverter.ToString(guid.ToByteArray()).Replace("-", "")
如有必要,您可以选择在组之间加上“-”,例如:
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)}";
}
}
我正在使用以 UUID 作为主键的 Firebird 数据库,但我 运行 遇到了以下问题:
我的 C# 应用程序中同一 Guid 的文本表示与数据库中的不同。我在数据库中使用 UUID_TO_CHAR
函数获取文本表示,在我的 C# 应用程序中使用 Guid.ToString()
.
不同之处在于 Firebird 数据库解释 UUID 与 .net 框架的方式不同,我相信他们用 different byte ordering
来阅读它们例如,数据库中的 guid 如下所示:
FADE3E40-6227-5B40-BBB9-8492859EBA66
我的 C# 应用程序中的相同 guid 如下所示:
403edefa-2762-405b-bbb9-8492859eba66
有没有一种方法可以像在 C# 中一样在我的数据库中显示它们。或者反之亦然?
有没有办法在从数据库中获取它们并将它们放入数据库时进行转换,这样我就不必在任何地方使用格式了?
要获得与 firebird 中相同的表示形式 - 将 guid 的所有字节原样转换为十六进制:
BitConverter.ToString(guid.ToByteArray()).Replace("-", "")
如有必要,您可以选择在组之间加上“-”,例如:
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)}";
}
}