Mon application interagit avec des bases de données Oracle et SQL Server à l'aide d'une couche d'accès à des données personnalisée écrite dans ado.net à l'aide de digne DataRes. À l'heure actuelle, je pose un problème avec la conversion entre les GUID (que nous utilisons pour les clés primaires) et le type de données Oracle RAW. Les insertions dans Oracle sont bien (je viens d'utiliser la méthode ToByTeArray () sur System.Guid). Le problème est de convertir à System.Guid lorsque je charge des enregistrements de la base de données. Actuellement, j'utilise le tableau d'octets, je reçois de Ado.net pour passer au constructeur pour System.Guid. Cela semble fonctionner, mais les GUID qui apparaissent dans la base de données ne correspondent pas aux GUID que je génère de cette manière. P>
Je ne peux pas changer le schéma de base de données ou la requête (car elle est réutilisée pour SQL Server). J'ai besoin de code pour convertir le tableau d'octets de Oracle dans le bon guidon. P>
3 Réponses :
J'ai des souvenirs vagues que les GUID d'Oracle sont effectivement inversés par rapport à la commande .NET attend. P>
Essayez de renverser la matrice avant d'appeler le constructeur Il peut ne pas être assez em> aussi simple que d'inversion, cependant, vous devrez peut-être faire un échange plus détaillé. Je vous suggère de créer un GUID lorsque chaque octet est facile à identifier (utilisez 0x01, 0x23, 0x45, etc.) et travaillez à partir de là. P> guid code>. p>
Merci d'avoir répondu. Ce n'était pas tout à fait raison parce que je posais la mauvaise question. Votre suggestion m'a eu la bonne réponse, cependant.
Il s'avère que le problème était l'ordre d'octet que vous obtenez dans Je n'ai toujours aucune idée de la façon dont les octets sont commandés de cette façon, mais cela n'a apparemment rien à voir avec Oracle. P> guid.tobytearray () code> et non oracle lui-même. Si vous prenez le GUID "
11223344-5566-7788-9900-AABBCCDDEEFF CODE>" et appelez
TOBYEArraRay () CODE> dessus, vous obtenez "
44332211665588779900AABBCCDDEEFF >" . Si vous transmettez ensuite ce tableau d'octet dans le constructeur pour GUID, vous obtenez le GUID d'origine. Mon erreur essayait d'interroger la base de données Oracle par le format GUID d'origine (avec les tirets supprimés) au lieu du résultat du
TobyTeArray () code> appel. P>
C'est pourquoi ..... Stackoverflow.com/Questtions/9195551/...
J'avais juste ce même problème lors de la conservation et de la lecture des GUDS de Oracle.
Si votre application doit stocker et lire les GUID de Oracle, utilisez la fonction flipendienne à partir de ce fil: P>
Conversion GUID Native .Native P>
Byte[] rawBytesFromOracle; Guid dotNetGuid = new Guid(rawBytesFromOracle).FlipEndian();
Avez-vous des exemples de GUID avant qu'ils ne soient stockés et de la valeur lorsqu'elles sont stockées?
Économisez-vous le GUID comme une matrice d'octet à Oracle?