Pomocí zastaralý System.Data.OracleClient ale můžete použít ODP společnosti Oracle pomocí UDT. Pokud to není možné, nejsem si jistý, jak to můžete udělat pomocí parametrů v C# s System.Data.
ODP přichází s mnoha příklady a příklady jsou ve výše uvedených odkazech.
Chystám se přidat nějaké další odkazy, které snad pomohou:
- index ODP vizuálního studia
- toto přesně ukazuje, jak využít ODT k vytvoření vlastních obalů tříd a jejich volání (Všimněte si, že toto je v polovině, procházejí pomocí nástroje k vytvoření vlastních typů nad tím v příkladu -- tento návod je docela důkladný a měl by vás dostat přímo tam, kam potřebujete)
- Stáhnout :tento chlapík nyní také instaluje ukázkové soubory, toto je další skvělý příklad toho, co přesně musíte udělat:po instalaci přejděte na [cesta k adresáři, kterou instalujete]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs
Opravdu se vyplatí umožnit nástrojům ODT pro Visual studio, aby za vás vytvořily vaše třídy pro vaše UDT (např. IOracleCustomType a podobně). pak do nich můžete přejít a upravit je tak, aby vyhovovaly vašim potřebám. pak jakmile je vše řečeno a hotovo (úryvek z 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);
také si všimněte, že třída Person musí implementovat IOracleCustomType (který lze vytvořit pomocí odkazu v #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
Výše uvedené je pro úplný vlastní typ, ale hledáte vazbu ODP asociativního pole:
http://weblogs.asp .net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx
budete chtít použít
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
a vše by mělo zapadnout na místo