Nie będziesz w stanie tego łatwo zrobić za pomocą przestarzałe System.Data.OracleClient ale możesz użyć ODP Oracle z wykorzystaniem UDT. Jeśli to nie jest opcja, nie jestem pewien, jak możesz to zrobić za pomocą parametrów w C# za pomocą System.Data.
ODP zawiera wiele przykładów i są to przykłady w powyższych linkach.
Dodam więcej linków, które miejmy nadzieję pomogą:
- indeks ODP studia wizualnego
- pokazuje to dokładnie, jak wykorzystać ODT, aby utworzyć niestandardowe wrappery klas i wywoływać je (pamiętaj, że jest to w połowie, przechodzą za pomocą narzędzia do tworzenia niestandardowych typów powyżej w przykładzie -- ten przewodnik jest dość dokładny i powinien doprowadzić Cię bezpośrednio tam, gdzie musisz)
- Pobierz :teraz ten facet również instaluje przykładowe pliki, to jest kolejny wspaniały przykład tego, co musisz zrobić:po zainstalowaniu goto [ścieżka katalogu, którą instalujesz]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs
Naprawdę opłaca się pozwolić narzędziom ODT dla Visual studio tworzyć dla Ciebie klasy dla Twoich UDT (np. IOracleCustomType i tym podobne). możesz następnie wejść do nich i zmienić je zgodnie z własnymi potrzebami. potem wszystko jest już powiedziane i zrobione (fragment 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);
pamiętaj też, że klasa Person musi implementować IOracleCustomType (które można utworzyć, klikając link w punkcie 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
Powyższe dotyczy pełnego typu niestandardowego, ale szukasz powiązania tablicy asocjacyjnej ODP:
http://weblogs.asp .net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx
będziesz chciał użyć
param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
i wszystko powinno się ułożyć