2009-12-03 3 views
0

У меня есть запрос, который извлекает около 10000 записей из базы данных mysql, эти записи я читаю в CSV-файл.C# datareader продолжает висит

Теперь после 70 записей читатель висит и больше ничего не делает.

Никогда не было этого в моем другом коде до этого (возможно, большие данные, которые я хочу получить).

Мой код-то вроде этого:

using (var reader = db.Retrieve(sql)) 
{ 
    while (reader.Read()) { 

     //write results to my file 

    } 
} 

Код висит на 'в то время как (reader.Read())'

Я прочитал эту feed, но не реальный ответ не был дан. Или другие решения?

ответ

0

Хорошо, я разрешил подвеску в моем случае. Мой запрос был сложным, чтобы выполнить его сразу. Поэтому я упростил свой запрос, и теперь в течение минуты мой файл записывается с результатами.

0

Вы пробовали это, не записывая это в файл?

Вы пытались запустить это без DataReader, чтобы убедиться, что запрос в порядке?

Если это так, возможно, стоит попробовать более простой запрос, чтобы он возвращал только одно поле, скажем, первичный ключ, если в таблице определены один первичный ключ столбца.

+0

Это то же самое, что уже было пробовано, что – Gerbrand

1

Вы пробовали какие-либо предложения, сделанные в другой теме?

Попытайтесь найти SQL, сгенерированную и запущенную в студии управления SQL, и посмотрите, работает ли она там тоже медленно.

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

+0

это сложный запрос, всего 28 столбцов из 7 таблиц – Gerbrand

+0

Я собираюсь переписать запрос, я думаю, что это может быть проблема. Но потом также я не занимаю много времени, прежде чем я получу свой datareader после выполнения запроса, так что, возможно, не запрос? – Gerbrand

+0

Получение данных datareader не означает, что запрос завершен. –

0

Какова структура строк, возвращаемых в QueryBrowser? Является ли mySQL доводкой возвращенных результатов аналогичным образом?

0

Он вечно вешает или в конечном итоге падает? Если он сработает, поместите его в try catch и посмотрите, что такое исключение. Положите хранимую процедуру в попытку уловить также

+0

уже пытается захватить блок вокруг него. Он висит вечно. Самый длинный, который я ждал, был час. – Gerbrand

Смежные вопросы