바이트 배열을 Oracle RAW에서 System으로 변환합니다.가이드?
내 앱은 ADO로 작성된 사용자 지정 데이터 액세스 계층을 사용하여 Oracle 및 SQL Server 데이터베이스와 상호 작용합니다.데이터 리더를 사용하는 NET.현재 기본 키에 사용하는 GUID와 Oracle RAW 데이터 유형 간의 변환에 문제가 있습니다.오라클에 삽입해도 괜찮습니다(시스템에서 ToByteArray() 메서드를 사용합니다).GUID). 시스템으로 다시 변환하는 중입니다.데이터베이스에서 레코드를 로드할 때 GUID.현재 저는 ADO에서 받은 바이트 배열을 사용하고 있습니다.시스템의 생성자로 전달할 NET.Guid. 작동 중인 것처럼 보이지만 데이터베이스에 표시되는 Guid는 이러한 방식으로 생성되는 Guid와 일치하지 않습니다.
데이터베이스 스키마 또는 쿼리를 변경할 수 없습니다(SQL Server에 재사용되므로).오라클의 바이트 배열을 올바른 GUID로 변환하기 위한 코드가 필요합니다.
문제는 당신이 받는 바이트 순서였던 것으로 밝혀졌습니다.Guid.ToByteArray()
Oracle 자체가 아닙니다.만약 당신이 가이드를 맡으면"11223344-5566-7788-9900-aabbccddeeff
와 콜ToByteArray()
그 위에, 당신은 "44332211665588779900AABBCCDDEEFF
그런 다음 해당 바이트 배열을 GUID용 생성자로 다시 전달하면 원래 GUID가 됩니다.내 실수는 Oracle 데이터베이스를 (대시가 제거된) 원래 GUID 형식으로 쿼리하려고 한 것입니다.ToByteArray()
불러.
바이트가 왜 그런 식으로 주문되는지는 아직 잘 모르겠지만, Oracle과는 전혀 관련이 없는 것 같습니다.
Oracle에서 가이드를 저장하고 읽을 때도 같은 문제가 발생했습니다.
앱에서 Oracle 가이드를 저장하고 읽어야 하는 경우 다음 스레드에서 FlipEndian 기능을 사용합니다.
Byte[] rawBytesFromOracle;
Guid dotNetGuid = new Guid(rawBytesFromOracle).FlipEndian();
Oracle에서 다시 읽을 때만 플립이 필요합니다.
Oracle에 쓸 때는 GUID를 사용합니다.ByteArray()에 정상적으로 연결합니다.
저는 이 간단한 일을 완수하기 위해 너무 많은 시간을 보냈습니다.
스티브
저는 오라클의 GUID가 주문과 비교하여 효과적으로 뒤바뀐 기억이 있습니다.NET이 기대합니다.
호출하기 전에 어레이를 반대로 설정해 보십시오.Guid
시공자
그러나 후진하는 것만큼 간단하지 않을 수도 있습니다. 더 자세한 스와핑이 필요할 수도 있습니다.각 바이트를 쉽게 식별할 수 있는 GUID를 만들고(0x01, 0x23, 0x45 등 사용) 거기서 작업하는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/2667740/convert-byte-array-from-oracle-raw-to-system-guid
'sourcecode' 카테고리의 다른 글
C: 구조물에 대한 포인터 배열에 대한 포인터(할당/할당 취소 문제) (0) | 2023.07.23 |
---|---|
ORA-00955 "이름이 이미 기존 개체에서 사용되고 있습니다." (0) | 2023.07.23 |
스프링의 MockMvc를 저지 리소스와 함께 사용할 수 있습니까? (0) | 2023.07.23 |
이름에 대한 데이터베이스 쿼리에 대한 제안 사항 (0) | 2023.07.23 |
오라클 트리거에서 예외 무시 (0) | 2023.07.23 |