Du vil ikke være i stand til at gøre dette nemt med udfaset System.Data.OracleClient men du kan bruge oracles ODP med at bruge UDT'er. Hvis det ikke er en mulighed, er jeg usikker på, hvordan du kan gøre det via parametre i C# med System.Data.
ODP kommer med en masse eksempler, og der er eksempler i ovenstående links.
Jeg vil tilføje nogle flere links, der forhåbentlig vil hjælpe:
- visual studio ODP index
- dette viser dig præcis, hvordan du bruger ODT'en til at oprette dine brugerdefinerede klasseindpakninger og kalde dem (bemærk, at dette er midtvejs, de går igennem ved hjælp af værktøjet til at skabe de brugerdefinerede typer over det i eksemplet -- denne gennemgang er ret grundig og burde bringe dig direkte til, hvor du skal være)
- Download :nu installerer denne fyr også eksempelfiler, dette er endnu et fantastisk eksempel på præcis, hvad du skal gøre:en gang installeret gik til [mappesti du installerer]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs
Det kan virkelig betale sig at lade ODT-værktøjerne til Visual Studio oprette dine klasser til dine UDT'er for dig (f.eks. IOracleCustomType og sådan). du kan derefter gå ind i dem og ændre dem, så de passer til dine behov. så når alt er sagt og gjort (uddrag fra objekt1.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);
Bemærk også, at Person-klassen skal implementere IOracleCustomType (som kan oprettes ved at følge linket i #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
Ovenstående er for en fuld brugerdefineret type, men du er ude efter en associativ array ODP-binding:
http://weblogs.asp .net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx
du vil bruge
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
og alt skulle falde på plads