2013-11-12 2 views
0

Это мой код, который отлично работает до тех пор, пока моя база данных не будет содержать около 20000 записей в основной таблице. Когда DB находится в большой программе, зависает в инструкции da.Fill (данные). Бросок исключений исключается, программа просто перестает работать. Что я могу сделать?C# SqlDataAdapter с большой базой данных

DataTable data = new DataTable(); 
SqlCeCommand cmd = new SqlCeCommand(); 
SqlCeDataAdapter da = new SqlCeDataAdapter(); 

cmd = new SqlCeCommand("SELECT DISTINCT * FROM ((Osoba AS a LEFT OUTER JOIN Doswiadczenie AS b ON a.HashId = b.Hashid) LEFT OUTER JOIN Wyksztalcenie AS c on a.HashId = c.HashId) INNER JOIN Uczelnia as d ON c.UczelniaId = d.UczelniaId WHERE a.DataOstOdczytu >= @minDate AND a.DataOstOdczytu <= @maxDate AND b.DataOdczytu >= @minDate AND b.DataOdczytu <= @maxDate AND c.DataOdczytu >= @minDate AND c.DataOdczytu <= @maxDate", this.Connection); 

cmd.Parameters.Add(new SqlCeParameter("@minDate", minDate)); 
cmd.Parameters.Add(new SqlCeParameter("@maxDate", maxDate)); 

da.SelectCommand = cmd; 
try 
{ 
    da.Fill(data); 
} 
catch (System.Data.SqlServerCe.SqlCeException) 
{ 
    throw; 
} 

return data; 
+0

попробуйте получить строку за строкой вместо da.Fill (данные) – lordkain

+0

использовать datareader для лучшей производительности. общий компактный sql медленный, много записей. –

+1

Возможный дубликат [DataAdapter.Fill too slow] (http://stackoverflow.com/questions/8731241/dataadapter-fill-too-slow) – CodeCaster

ответ

-1

В catch блоке делают объект System.Data.SqlServerCe.SqlCeException exname и вместо броска написать Console.WriteLine(exname.Message), чтобы подтвердить, что не является исключением.

+1

Блокировка блокирует исключение уже ... что фактически делает блок catch избыточным. –

+0

Мы можем получить подтверждение, получаем ли мы исключение или нет, напечатав его. – Afaq

+0

@Raptor Debugging - это, безусловно, превосходный вариант, если вы хотите проверить, нет ли у вас каких-либо исключений. – Tobberoth

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