OracleDataAdapter не заполняет DataTable из запроса - PullRequest
3 голосов
/ 03 апреля 2012

Я пишу приложение на C # для баз данных SQL Server и Oracle, которое определено в моем файле конфигурации приложения. Когда я запускаю код в среде SQL Server, он работает нормально. Я получаю правильные результаты.

Рабочий код SQL Server находится здесь:

sqlConn.Open();
stmt = "SELECT ACTION_ID, ACTION FROM DB.ACTIONS WHERE ACTION_DATE < GETDATE() AND STATUS = 'Pending'";
SqlDataAdapter sqlAdapt = new SqlDataAdapter(stmt, sqlConn);
sqlAdapt.Fill(dt);
sqlConn.Close();

Код Oracle, который не работает, выглядит следующим образом:

oraConn.Open();
stmt = "SELECT ACTION_ID, ACTION FROM DB.ACTIONS WHERE ACTION_DATE < SYSDATE AND STATUS = 'Pending'";
OracleDataAdapter oraAdapt = new OracleDataAdapter(stmt, oraConn);
oraAdapt.Fill(dt);
oraConn.Close();

Я пытаюсь заполнить datatable dt результатами. Я попытался сначала использовать DataSet и заполнить DataTable DataSet, но в Oracle это не сработало, когда в SQL Server это сработало. Кажется, чего-то не хватает.

Я не получаю никаких ошибок, я просто получаю 0 результатов из Oracle, хотя я знаю, что есть данные, которые нужно извлечь.

Ответы [ 3 ]

3 голосов
/ 03 апреля 2012

Проблема заключалась в том, что учетная запись DBO, с которой я входил в базу данных, не имела разрешений для таблицы.Я выполнил простой грант, и он отлично работал.

    GRANT SELECT ON DB.ACTIONS TO USER;
1 голос
/ 03 апреля 2012

Я предлагаю изменить код для разделения уровня диагностики.

1) заменить утверждение простым «выберите sysdate from dual;»чтобы увидеть, есть ли какая-либо строка возврата.

2) если ничего не возвращается, это может быть ваша проблема с соединением.просмотрите ваше свойство соединения.

3) если что-то возвращается, но не заполняет набор данных, попробуйте использовать oracle reader, чтобы сгенерировать вывод и увидеть действительно результат.

Надеюсь, это поможет вам.

0 голосов
/ 03 апреля 2012

Выполнение запроса непосредственно в БД (например, с использованием sqlplus, TOAD, SQLDEveloper и т. Д.).Это что-нибудь возвращает?Если нет:

a) В SQL Server при сравнении текста (STATUS = 'Pending') регистр не учитывается, в нем регистр учитывается.Может быть, у вас есть данные в столбце состояния, например, 'PENDING'?

b) Является ли ACTION_DATE типом данных date?Если это varchar, это не сработает.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...