Вы не сможете сделать это легко с устаревшим System.Data.OracleClient
но вы можете использовать ODP от Oracle * Oracle * с использованием UDT. Если это не вариант, я не уверен, как вы можете сделать это через параметры в C # с System.Data.
ODP содержит множество примеров, и в приведенных выше ссылках есть примеры.
Я собираюсь добавить еще несколько ссылок, которые, надеюсь, помогут:
- Индекс ODP для визуальной студии
- это показывает, как именно
использовать ODT, чтобы создать свой кастом
Обертки класса и назовите их (сделать
обратите внимание, что это на полпути,
они проходят через инструмент, чтобы
создать пользовательские типы над ним в
пример - это прохождение
довольно тщательно и должен получить вас
прямо там, где нужно быть)
- Скачать : теперь этот парень тоже
устанавливает образцы файлов, это
еще один потрясающий пример именно
что нужно сделать: после установки
Перейти к [путь к каталогу вы
установка] .. \ продукт \ 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;
и все должно встать на свои места