powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не получается через OracleDataProvider получить рекордсет.
2 сообщений из 2, страница 1 из 1
Не получается через OracleDataProvider получить рекордсет.
    #37290542
hstas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.к. Микрософт сама порекомендовала использовать ODP заместо своего OracleClient, решил новую мелкую задачку сделать на ODP.
Есть оракловая функция. Возвращает данные через Output RefCursor.
Делаю все как обычно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
 OracleConnection oraConnect = new OracleConnection(connectionString);

            if (oraConnect.State != ConnectionState.Open)
            {
                try
                {
                    oraConnect.Open();
                }
                catch (OracleException ex)
                {
                    throw new Exception("Ошибка подключения к БД\n" + ex.Message);
                }
            }


            DataSet dataSet = new DataSet();
            OracleParameter param;
            OracleCommand sqlCommand = oraConnect.CreateCommand();
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.CommandText = sSPName;            

            sqlCommand.Parameters.Clear();          

            param = new OracleParameter("p_xttk_id", OracleDbType.Int32);
            param.Direction = ParameterDirection.Input;
            param.Value = 4;
            sqlCommand.Parameters.Add(param);

            param = new OracleParameter("p_recordset", OracleDbType.RefCursor);
            param.Direction = ParameterDirection.Output;
            sqlCommand.Parameters.Add(param);

            param = new OracleParameter("v_retcode", OracleDbType.Int32);
            param.Direction = ParameterDirection.ReturnValue;
            sqlCommand.Parameters.Add(param);

            sqlCommand.Prepare();

            OracleDataAdapter sqlAdapter = new OracleDataAdapter(sqlCommand);
            
            //дергаем
            try
            {
                sqlAdapter.Fill(dataSet);
            }
            catch (OracleException Ex)
            {
                throw new Exception(Ex.Message);
            }
            finally
            {
                oraConnect.Close();
            }

            oraConnect.Dispose();
            return dataSet;

получаю DataSet c одной таблицей, в которой Rows.Count = 0. т.е. курсор возвратил пустой рекордсет.

Попробовал по старинке сделать так же, но через System.Data.OracleClient - получаю рекордсет с набором строк, так как и должно было быть.


Вопрос: что еще надо (или как правильно надо) работать через ODP - чтобы функция возвратила набор данных?
...
Рейтинг: 0 / 0
Не получается через OracleDataProvider получить рекордсет.
    #37290681
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В SP'шке p_recordset первый параметр? (Хоть это и для хибера, но... Мало ли...)
2. М.б. дело в очередности добавления параметров:
hstas
Код: plaintext
1.
2.
3.
param = new OracleParameter("p_xttk_id", OracleDbType.Int32);
param = new OracleParameter("p_recordset", OracleDbType.RefCursor);
param = new OracleParameter("v_retcode", OracleDbType.Int32);

?
Попробуйте так (заодно посмотрите, в каком порядке будут расположены параметры в sqlCommand.Parameters):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
DataSet dataSet = new DataSet();
OracleCommand sqlCommand = oraConnect.CreateCommand();
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.CommandText = sSPName;            
OracleCommandBuilder.DeriveParameters(sqlCommand);
sqlCommand.Parameters["p_xttk_id"].Value =  4 ;
OracleDataAdapter sqlAdapter = new OracleDataAdapter(sqlCommand);
sqlAdapter.Fill(dataSet);
У меня выше приведенная конструкция все возвращает без проблем ( ODAC 11.2 Release 3 (11.2.0.2.1) + SP'шка с первым параметром cur out sys_refcursor ). Проводить исследования на предмет зависимости от расположения параметров в SP'шке/очередности добавления в xCommand.Parameters - недосуг.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не получается через OracleDataProvider получить рекордсет.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]