当前位置: 首页 > 编程语言 > C#

将字节数组从OracleRAW转换为System.Guid?

时间:2023-04-10 16:04:24 C#

将字节数组从OracleRAW转换为System.Guid?我的应用程序使用DataReader与Oracle和SQLServer数据库交互,DataReader是一个用ADO.NET编写的自定义数据访问层。现在我在GUID(我们用于主键)和OracleRAW数据类型之间转换时遇到问题。插入oracle很好(我只是在System.Guid上使用ToByteArray()方法)。问题是当我从数据库加载记录时转换回System.Guid。目前,我正在使用从ADO.NET获得的字节数组传递给System.Guid的构造函数。这似乎有效,但数据库中出现的Guid与我通过这种方式生成的Guid不对应。我无法更改数据库架构或查询(因为它被重新用于SQLServer)。我需要代码来转换Oracle中的字节数组以更正Guid。事实证明,问题是您在Guid.ToByteArray()中获得的字节序,而不是Oracle本身。如果您使用Guid“11223344-5566-7788-9900-aabbccddeeff”并对其调用ToByteArray(),您将得到“44332211665588779900AABBCCDDEEFF”。如果您随后将该字节数组传递回Guid的构造函数,您将获得原始Guid。我的错误是试图通过原始Guid格式(删除破折号)而不是ToByteArray()调用的结果来查询Oracle数据库。我仍然不知道为什么字节是这样排序的,但它显然与Oracle无关。从Oracle存储和读取Guid时,我遇到了同样的问题。如果您的应用需要在Oracle中存储和读取Guid,请使用本线程中的FlipEndian函数:.NETNativeGUIDconversionByte[]rawBytesFromOracle;GuiddotNetGuid=newGuid(rawBytesFromOracle).FlipEndian();只有在回读时才需要翻转。写入Oracle时,照常使用Guid.ToByteArray()。我花了太多时间试图完成这个简单的任务。史蒂夫我有一些模糊的回忆,与.NET预期的顺序相比,Oracle的GUID被有效地颠倒了。在调用Guid构造函数之前尝试反转数组。然而,这可能不像倒车那么简单——您可能需要进行更详细的调换。我建议您创建一个GUID,其中每个字节都易于识别(使用0x01、0x23、0x45等)并从那里开始工作。以上就是C#学习教程:ConvertbytearrayfromOracleRAWtoSystem.Guid?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: