Как получить данные из длинного запроса Sql Server с использованием C # за несколько шагов - PullRequest
0 голосов
/ 27 апреля 2011

Я хочу получать данные из длинного запроса, как это делает Sql Server Management Studio. Я имею в виду, что он отображает небольшие объемы данных, как только они получены с сервера (в данном случае, SQL Server 2008).

Я использую C # и NET 3.5. Я прочитал документацию о BeginExecuteReader: этот метод запускает запрос асинхронно, но операция чтения выполняется синхронно.

К сожалению, я не нашел ни одного реального примера, когда гуглял по этому поводу :-( Можете ли вы помочь мне с этой темой?

Мой запрос прост: SELECT [...] FROM [...] WHERE [...]

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

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Вам не нужно выполнять читатель асинхронно для того, что вы хотите выполнить. Вот пара вариантов для вас:

Вариант 1. Отображение записей по мере их чтения (или пакетирования) с помощью с использованием SqlDataReader . В зависимости от вашего приложения вам может потребоваться запустить программу чтения в отдельном потоке и уведомить поток пользовательского интерфейса, чтобы соответствующим образом обновить представление (например, с помощью BackgroundWorker).

using (SqlDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        //read record, diplay record
    }
}

Вариант 2 (лучший вариант): Пейджинг результатов вашего запроса и отображение только «экрана» данных одновременно.

1 голос
/ 27 апреля 2011

Вы можете попробовать разбить набор результатов на страницы и получить чанк, как только они будут переданы из базы данных сервера sql в приложение.

  1. Подсчитать набор результатов.
  2. С помощьюсчитать число, разбивать на страницы набора результатов размером 1000 (или более) (используйте ROW_NUMBER на сервере Sql)
  3. Показать первый набор результатов (разбит на страницы), а затем добавить остальные, как только они вернутся.

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

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