Я использую dll OPD.NET в проекте, который обращается к оракулу.
Пользователи могут вводить любой SQL в текстовое поле, которое затем выполняется для базы данных. Я пытался использовать OracleDataAdapter для заполнения таблицы данных набором результатов, но я хочу иметь возможность возвращать набор результатов поэтапно (для больших запросов выбора).
Пример моей проблемы...
Если запрос на выборку возвращает 13 строк данных, приведенный ниже фрагмент кода будет выполняться без проблем до тех пор, пока не будет вызван четвертый раз oda.Fill (начальная строка равна 15, которая не существует), я полагаю, потому что он вызывает читатель, у которого есть закрытый или что-то подобное.
Затем он выдаст исключение System.InvalidOperationException с сообщением «Операция недействительна из-за текущего состояния объекта».
Как я могу узнать, сколько всего строк будет содержать команда в конечном итоге (чтобы я не столкнулся с исключением)?
OracleDataAdapter oda = new OracleDataAdapter(oracleCommand);
oda.Requery = false;
var dts = new DataTable[] { dt };
DataTable dt = new DataTable();
oda.Fill(0, 5, dts);
var a = dts[0].Rows.Count;
oda.Fill(a, 5, dts);
var b = dts[0].Rows.Count;
oda.Fill(b, 5, dts);
var c = dts[0].Rows.Count;
oda.Fill(c, 5, dts);
var d = dts[0].Rows.Count;
Примечание. Для краткости я опустил объекты команд соединения и оракула.
РЕДАКТИРОВАТЬ 1: я просто подумал, что могу просто обернуть SQL, введенный пользователем, в другой запрос и выполнить его... SELECT COUNT(*) FROM (... исходный запрос здесь...), но это не так точно чистое решение, и наверняка где-то есть метод, которого я не видел?
Заранее спасибо.