Няма да можете да направите това лесно с отхвърлен System.Data.OracleClient но можете да използвате ODP на oracle с използване на UDT. Ако това не е опция, не съм сигурен как можете да го направите чрез параметри в C# със System.Data.
ODP идва с много примери и има примери в горните връзки.
Ще добавя още няколко връзки, които се надявам да помогнат:
- visual studio ODP индекс
- това ви показва как точно да използвате ODT, за да създадете обвивки на персонализирани класове и да ги извикате (имайте предвид, че това е по средата, те минават през него с помощта на инструмента за създаване на персонализираните типове над него в примера -- този преглед е доста задълбочен и трябва да ви отведе директно там, където трябва да бъдете)
- Изтегляне :сега този човек също инсталира примерни файлове, това е още един страхотен пример за това, което точно трябва да направите:веднъж инсталиран отидете до [път на директория, която инсталирате]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs
Наистина си струва да позволите на ODT инструментите за Visual Studio да създават вашите класове за вашите UDT вместо вас (напр. IOracleCustomType и подобни). след това можете да влезете в тях и да ги промените, за да отговарят на вашите нужди. след това, след като всичко е казано и направено (фрагмент от 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);
също имайте предвид, че класът Person трябва да имплементира IOracleCustomType (който може да бъде създаден, като следвате връзката в #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
Горното е за пълен персонализиран тип, но вие търсите ODP свързване на асоциативен масив:
http://weblogs.asp .net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx
ще искате да използвате
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
и всичко трябва да си дойде на мястото