2013-08-26 23 views
36

Mam mały problem i mam nadzieję, że ktoś może udzielić mi porady. Używam polecenia SQL, ale wygląda na to, że pobranie tej komendy zajmuje około 2 minut, ponieważ jest dużo danych. Ale domyślny czas połączenia wynosi 30 sekund, jak to zwiększyć i zastosować go do tego polecenia?Zwiększenie limitu czasu polecenia polecenia SQL

public static DataTable runtotals(string AssetNumberV, string AssetNumber1V) 
{ 
    DataTable dtGetruntotals; 

    try 
    { 
     dtGetruntotals = new DataTable("Getruntotals"); 

     //SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 6); 
     //AssetNumber.Value = AssetNumberV; 

     SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 10); 
     AssetNumber.Value = AssetNumberV; 

     SqlParameter AssetNumber1 = new SqlParameter("@AssetNumber1", SqlDbType.VarChar, 10); 
     AssetNumber1.Value = AssetNumber1V; 

     SqlCommand scGetruntotals = new SqlCommand("EXEC spRunTotals @AssetNumber,@AssetNumber1 ", DataAccess.AssetConnection); 
     // scGetruntotals.Parameters.Add(AssetNumber); 
     scGetruntotals.Parameters.Add(AssetNumber); 
     scGetruntotals.Parameters.Add(AssetNumber1); 

     SqlDataAdapter sdaGetruntotals = new SqlDataAdapter(); 
     sdaGetruntotals.SelectCommand = scGetruntotals; 
     sdaGetruntotals.Fill(dtGetruntotals); 

     return dtGetruntotals; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error Retriving totals Details: Processed with this error:" + ex.Message); 
     return null; 
    } 
} 
+3

Należy również rozważyć dodanie wartości limitu czasu do pliku konfiguracyjnego, w przeciwnym razie każda zmiana oznaczałaby ponowne wprowadzenie kodu. – christiandev

Odpowiedz

73

trwa to polecenie około 2 minut, aby powrócić do danych, ponieważ istnieje wiele danych

Bad Design. Rozważ użycie stronicowania tutaj.

Domyślny czas połączenia wynosi 30 sekund, w jaki sposób zwiększyć ten

Jak jesteś w obliczu Timout na komendę, więc trzeba zwiększyć Timout swojego sql command. Można określić go w komendzie jak ten

// Setting command timeout to 2 minutes 
scGetruntotals.CommandTimeout = 120; 
+0

nie ma za co, możesz to zaakceptować. Chociaż poważnie powstrzymam się od korzystania z zapytania, które trwa 2 minuty. spróbuj użyć stronicowania. – Ehsan

+0

Jakiekolwiek wady wydłużenia limitu czasu do 10 min lub 30 min? –

+0

@ManishKumarSingh Kto będzie czekać 10 minut na zapytanie, aby zwrócić wyniki? To jest era milisekund. – Ehsan

14

Dodaj limit czasu dla swojej SqlCommand. Proszę pamiętać, że czas jest na sekundę.

// Setting command timeout to 1 second 
scGetruntotals.CommandTimeout = 1; 
+9

Dzięki za napisanie: "Proszę pamiętać, że czas jest na sekundę." – ShaileshDev

+0

Jakiekolwiek wady wydłużenia limitu czasu do 10 min lub 30 min? –

+0

Manish, czy chcesz poczekać 10 minut lub 30 minut na proces, aby uzyskać dane? Jeśli jest to proces nocny i to jedyne i nie będzie ingerować nigdzie indziej, 30 minut, dlaczego nie. Lub jeśli nie czekasz na wynik, dlaczego nie. – MiscellaneousUser

0

Ponieważ trwa 2 minut, aby odpowiedzieć, można zwiększyć limit czasu do 3 minut, dodając poniższy kod

scGetruntotals.CommandTimeout = 180; 

Uwaga: parametr wartość jest w sekundach.

0

Ustawienie parametru CommandTimeout na 120 nie jest zalecane. Spróbuj użyć paginacji, jak wspomniano powyżej. Ustawienie parametru CommandTimeout na 30 jest traktowane jako normalne. Coś więcej niż to jest uważane za złe podejście i zazwyczaj kończy się czymś złym w Wdrażaniu. Teraz świat działa w oparciu o podejście MiliSeconds.

Powiązane problemy