Как метод заполнения SQLDataAdapter запускает запросы к базе данных?

У меня есть вопрос о понимании метода заполнения SQLDataAdapter, который принимает такие аргументы, как startRecord, MaxRecord, как показано ниже:

SqlDataAdapter adap = new SqlDataAdapter ("Select * from tblname",ConnectionString);
DataSet ds = new DataSet();
adap.Fill(ds, startIndex, MaxRecords , "TableName");

Я хочу знать, что будет делать SqlDataAdapter.

Будет ли он сначала запускать запрос, который вернет всю запись из таблицы, а затем отфильтрует строки из нее?

or

Будет ли он запускать запрос в базе данных, который выберет только необходимое количество строк?


person Dinu    schedule 08.12.2011    source источник


Ответы (2)


sqlDataAdapter.Fill(dataSet, currentIndex, pageSize, "TableName"); будет запрашивать весь набор результатов, а затем выгружать их в память.

Для больших наборов результатов это не то, что вам нужно. Если вы хотите, чтобы подкачка происходила на сервере, используйте предложения SKIP и TOP в используемом вами SQL.

Вот документация, объясняющая это .

person Wouter de Kort♦    schedule 08.12.2011

SqlDataAdapter служит мостом с DataSet и SQL Server для извлечения и сохранения данных. Когда SqlDataAdapter заполняет набор данных, он создает необходимые таблицы и столбцы для возвращаемых данных, если они еще не существуют.

Это фрагмент кода, чтобы вы лучше поняли

string sqlStatement = "Select * from tblname ";
                SqlCommand cmd = new SqlCommand(sqlStatement, con);
                DataSet ds = new DataSet();

                SqlDataAdapter adap = new SqlDataAdapter(cmd);
                cmd.ExecuteNonQuery();
                adap.Fill(ds);
person AnandMohanAwasthi    schedule 08.12.2011
comment
Итак, какой запрос будет запускать sladapter? - person Dinu; 08.12.2011
comment
sqladapter — это набор команд и соединений, которые используются для заполнения набора данных... - person AnandMohanAwasthi; 08.12.2011
comment
Итак, какой запрос будет запускать sladapter? Будет ли он запускать запрос, который принесет данные всей строки, или он запустит запрос, который получит только выбранные строки? - person Dinu; 08.12.2011
comment
Это будет набор данных на основе sqlstatement. Например, если ваш sqlstatement возвращает 10 строк, то sqladapter заполнит 10 строк в наборе данных. - person AnandMohanAwasthi; 08.12.2011
comment
хорошо, если мой запрос на выборку возвращает 1000 строк, и если я поместил фильтр в запрос (используя метод заполнения SqlAdpater) с ограничением и смещением, скажем, допустим, 10 строк. Какой будет запрос, который будет запущен? - person Dinu; 08.12.2011
comment
DataSet заполняется только 10 записями, но возвращается все имя таблицы. Используйте столбец первичного ключа, чтобы определить следующий размер страницы. msdn.microsoft.com/en-us/ библиотека/tx1c9c2f%28v=VS.100%29.aspx - person AnandMohanAwasthi; 08.12.2011