Bonjour,
j'ai un problème pour utiliser le driver ODBC d'Oracle sur des objets complexes en C#.
A la base, je veux lire des objets Oracle Spatial (SDO_GEOMETRY).
J'arrive à accéder aux éléments simples de l'objet (SDO_GTYPE) mais je n'arrive pas à lire les sous objets SDO_ELEM_INFO et SDO_ORDINATES qui sont de types SDO_ELEM_INFO_ARRAY et SDO_ORDINATE_ARRAY (qui eux mêmes sont des alias pour VARRAY (1048576) of NUMBER).
Lorsque j'execute la fonction read j'obtiens l'exception suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 string queryString = "select l.geometrie.SDO_ELEM_INFO from lignes l;"; using (OdbcConnection connection = new OdbcConnection(connectString)) { connection.Open(); try { OdbcCommand command = new OdbcCommand(queryString); command.Connection = connection; command.CommandType = System.Data.CommandType.Text; OdbcDataReader reader = command.ExecuteReader(); while (reader.Read()) { decimal[] d = (decimal[])reader.GetValue(0); } } catch { } }
Ce qui est très étonnant, c'est que lorsque j'utilise une autre méthode pour lire Oracle ( les objets OracleConnection, OracleCommand et OracleDataReader de la librairie Oracle.DataAccess ), ce même code marche."ERROR [HY000] [Oracle][ODBC][Ora]ORA-24359: OCIDefineObject n'a pas été appelé pour un type d'objet ou une référence"
Néanmoins je préfèrerais utiliser ODBC plutôt que le client de la DLL Oracle.DataAccess.
D'une manière générale, j'aimerais savoir comment lire les objets "complexes" avec ODBC.
Je vous remercie par avance pour votre aide.
Partager