Non sarai in grado di farlo facilmente con System.Data.OracleClient obsoleto ma puoi utilizzare ODP di Oracle con l'utilizzo di UDT. Se questa non è un'opzione, non sono sicuro di come farlo tramite i parametri in C# con System.Data.
ODP viene fornito con molti esempi e ci sono esempi nei link sopra.
Aggiungo altri collegamenti che, si spera, aiutino:
- indice ODP dello studio visivo
- questo ti mostra esattamente come utilizzare l'ODT per creare i tuoi wrapper di classe personalizzata e chiamarli (ricorda che questo è a metà strada, loro procedono usando lo strumento per creare i tipi personalizzati sopra di esso nell'esempio -- questa procedura dettagliata è abbastanza completa e dovrebbe portarti direttamente dove devi essere)
- Scarica :ora questo tizio installa anche file di esempio, questo è un altro fantastico esempio di esattamente cosa devi fare:una volta installato, vai a [percorso della directory che installi]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs
Vale davvero la pena consentire agli strumenti ODT per Visual Studio di creare le tue classi per i tuoi UDT per te (ad esempio IOracleCustomType e simili). puoi quindi esaminarli e modificarli in base alle tue esigenze. quindi una volta che tutto è stato detto e fatto (snippet da object1.cs):
Person p1 = new Person();
p1.Name = "John";
p1.Address = "Address1";
p1.Age = 20;
// Establish a connection to Oracle
OracleConnection con = new OracleConnection(constr);
con.Open();
// Update Person object and insert it into a database table
OracleCommand cmd = new OracleCommand(sql1, con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();
param1.OracleDbType = OracleDbType.Object;
param1.Direction = ParameterDirection.InputOutput;
// Note: The UdtTypeName is case-senstive
param1.UdtTypeName = "SCOTT.ODP_OBJ1_SAMPLE_PERSON_TYPE";
param1.Value = p1;
cmd.Parameters.Add(param1);
tieni inoltre presente che la classe Person deve implementare IOracleCustomType (che può essere creato seguendo il link al n. 2)
/* Person Class
An instance of a Person class represents an ODP_OBJ1_SAMPLE_PERSON_TYPE object
A custom type must implement INullable and IOracleCustomType interfaces
*/
public class Person : INullable, IOracleCustomType
Quanto sopra è per un tipo personalizzato completo, ma stai cercando un'associazione ODP di matrice associativa:
http://weblogs.asp .net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx
vorrai usare
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
e tutto dovrebbe andare a posto