Невозможно заполнить DataTable из OracleRefCursor - PullRequest
0 голосов
/ 24 июня 2019

Я следил за всеми вопросами здесь и документацией .Net и Oracle, и не нашел никакой надежды, кроме как получить помощь здесь!

У меня есть процедура, которая возвращает SYS_REFCURSOR

Мне удалось получить его как outparam, но мне было трудно понять, в чем проблема с заполнением DataTable от курсора

OracleCommand cmd = new OracleCommand();
cmd.CommandType = CommandType.StoredProcedure;
...
cmd.Parameters.Add("pView", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();

OracleRefCursor cursor = (OracleRefCursor)cmd.Parameters["pView"].Value;
// cursor.RowSize = 2540

OracleDataAdapter da = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
int rowsCount = da.Fill(dt, cursor);                     
// rowsCount = 0

1 Ответ

0 голосов
/ 25 июня 2019

Ну, после действительно большой суеты казалось, что RowSize & FetchSize ненадежны !

Проблема была в том, что параметры неправильно поступали в базу данных (порядок параметров!)

Но благодаря этот комментарий можно решить, настроивcmd.BindByName = true;

...