Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Вопрос по OleDbCommand  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
Такая проблема. В OleDbCommand для работы с Oracle важен только порядок передачи параметров (он должен быть таким же как в хранимке). Можно ли ка-то это исправить? может я что-то недопонимаю?
30 янв 09, 13:16    [6758701]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
WYPMAH
Member

Откуда: USA
Сообщений: 1956
kmaw

скажите прямо, в чем проблема?
30 янв 09, 14:19    [6759258]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
есть хранимка
create or replace package p_KS is

  procedure upd(p1_ number, p2_number);

end p_KS;

так она вызывается

OleDbCommand cmd = new OleDbCommand(commandUpdateName/*=p_KS.upd*/);

IEnumerator ie1 = od.Keys.GetEnumerator();
IEnumerator ie2 = od.Values.GetEnumerator();

while (ie1.MoveNext() && ie2.MoveNext())
{ 
    OleDbParameter p = new OleDbParameter();
    p.ParameterName = (string)ie1.Current;
    p.Value = ie2.Current;

    cmd.Parameters.Add(p);
}

dm.ExecuteNonQuery(cmd);

а вот если я переопределю хранимку как
create or replace package p_KS is

procedure upd(p2_ number, p1_number);

end p_KS;

или поменяю столбцы в гриде, то работать не будет, так как имя параметра игнориуется, а тольковажен порядок параметров
30 янв 09, 14:29    [6759324]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
когда работаю с MS SQL Server и соответственно с SqlCommand, то проблемы такой нет.
30 янв 09, 14:31    [6759342]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
это очень неудобно - так как теперь с разработчиком бизнес логики в БД надо еще и согласовывать порядок переменных
30 янв 09, 14:38    [6759428]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
Ex_Soft
Member

Откуда:
Сообщений: 7712

Надеюсь, идею поймете:
OleDbCommandBuilder.DeriveParameters(cmd);
foreach(OleDbParameter SPParam in cmd.Parameters)
{
	if(SPParam.Direction==ParameterDirection.ReturnValue || SPParam.Direction==ParameterDirection.Output)
		continue;

	SPParam.Value = (PassedParam=GetParam(SPParam.ParameterName))!=null ? PassedParam.ParamValue : DBNull.Value;
}

cmd.ExecuteNonQuery();

foreach(OleDbParameter SPParam in cmd.Parameters)
{
	if(SPParam.Direction==ParameterDirection.Input)
		continue;

	if(SPParam.Direction==ParameterDirection.ReturnValue)
		ReturnValue=Convert.ToInt32(SPParam.Value);

	if((PassedParam=GetParam(SPParam.ParameterName))!=null)
		PassedParam.ParamValue=SPParam.Value;
}
_________________
"Helo, word!" - 17 errors 56 warnings

Posted via ActualForum NNTP Server 1.4

30 янв 09, 17:48    [6760792]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
спасибо - идею понял: информацию опараметрах хранимой процедуры получаем не априори, а непосредственно с сервера БД.
31 янв 09, 09:23    [6762207]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
kmaw
Member [заблокирован]

Откуда: бобруйск
Сообщений: 24786
только вот почему-то ексепшн

The stored procedure 'p_package.upd' doesn't exist

хотя процедура точно существует. в чем может быть проблема?
31 янв 09, 09:59    [6762218]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по OleDbCommand  [new]
Изопропил
Member

Откуда:
Сообщений: 31536
kmaw,
воспользуйтесь родным провайдером от Oracle - ODP.NET

http://www.oracle.com/technology/tech/dotnet/index.html
31 янв 09, 11:03    [6762269]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить