где get_entities определена либо как функция без параметров возвращающая REF CURSOR
function get_entities return refcursor;
либо как процедура с OUT параметром типа REF CURSOR.
procedure get_entities(p_entities out refcursor);
ExecuteReader у ODP будет фалить, так как ему необходимо что б в команде было указано, либо Return параметер типа RefCursor (в первом случае), либо Output параметр RefCursor (во втором). В текущей реализации BLT, в случае если parameterValue метода DbManager.SetSpCommand путой, CreateSpParameters не вызывается и команда выполняется с пустым списком параметров.
Форсировал вызов CreateSpParameters (с небольшими изменениями в ней), ExecuteReader'ы стали выполняться.
Re[2]: DbManager.SetSpCommand с пустым parameterValues
Здравствуйте, IT, Вы писали:
S>>Форсировал вызов CreateSpParameters (с небольшими изменениями в ней), ExecuteReader'ы стали выполняться. IT>Давай глянем на небольшие изменения
счтитала что ей передаётся обязательно не пустой parameterValues.
Вопрос, а с System.Data.SqlClient.SqlCommand всё и так работает? Или там возврат курсора из хранимой процедуры как-то по другому делаeтся. Просто не знаком с MS SQL.
Re: DbManager.SetSpCommand с пустым parameterValues
Здравствуйте, Sashko, Вы писали:
S>Вопрос, а с System.Data.SqlClient.SqlCommand всё и так работает? Или там возврат курсора из хранимой процедуры как-то по другому делаeтся. Просто не знаком с MS SQL.
Вроде работает. Впрочем, MS SQL не возвращает курсоров.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: DbManager.SetSpCommand с пустым parameterValues
IT>Вроде работает. Впрочем, MS SQL не возвращает курсоров.
Ага, у него вроде и типа да же такого нет, для параметров. А вот MS'ный DP для Oracle (System.Data.OracleClient) ведёт себя так же как и ODP.NET (Oracle.DataAccess.Client). Если пытаться вызать SP без параметров и она определена как
type refcursor is ref cursor;
function get_entities return refcursor;
происходит ошибка
ORA-06550: Строка 1, столбец 7:
PLS-00221: 'GET_ENTITIES' не является процедурой или не определена
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored
если определена как
type refcursor is ref cursor;
procedure get_entities(p_entities out refcursor);
ошибка
ORA-06550: Строка 1, столбец 7:
PLS-00306: ошибочно число или типы аргументов при обращении к 'GET_ENTITIES'
ORA-06550: Строка 1, столбец 7:
PL/SQL: Statement ignored
Re[5]: DbManager.SetSpCommand с пустым parameterValues
Здравствуйте, Sashko, Вы писали:
IT>>Вроде работает. Впрочем, MS SQL не возвращает курсоров.
S>Ага, у него вроде и типа да же такого нет, для параметров. А вот MS'ный DP для Oracle (System.Data.OracleClient) ведёт себя так же как и ODP.NET (Oracle.DataAccess.Client). Если пытаться вызать SP без параметров и она определена как
Проверил для MS SQL, обновил версию на сайте. Проверь плиз для Оракла.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: DbManager.SetSpCommand с пустым parameterValues
Здравствуйте, Sashko, Вы писали:
IT>>Проверил для MS SQL, обновил версию на сайте. Проверь плиз для Оракла.
S>Да, всё работает, и с MS'овским и с ODP.NET.
Куль. А как ты ODP.NET подключал?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: DbManager.SetSpCommand с пустым parameterValues
S>>Да, всё работает, и с MS'овским и с ODP.NET. IT>Куль. А как ты ODP.NET подключал?
Написал OracleOraDataProvider для ODP.NET
using Oracle.DataAccess.Client;
// ...public class OracleDataProvider : BLToolkit.Data.DataProvider.IDataProvider
{
// Копия BLToolkit.Data.DataProvider.OracleDataProvider
// так как у ODP.NET имена основных типов совпадают с MS'ыми, только
// живут в разных namespace'ачpublic virtual string Name
{
get { return"ODP"; }
}
}
Так везде OracleDataProvider конечно, просто вначале его OraDataProvider назвал что не путать с BLToolkit'ным, а потом в отдельный namespace перетащил и хотел обозвать так же OracleDataProvider, но опечатался