2013-08-26 17 views
36

Ich habe ein kleines Problem und hoffe, jemand kann mir einen Rat geben. Ich führe einen SQL-Befehl aus, aber es scheint, dass dieser Befehl ungefähr 2 Minuten dauert, um die Daten zurückzugeben, da viele Daten vorhanden sind. Aber die Standard-Verbindungszeit beträgt 30 Sekunden. Wie kann ich das erhöhen und auf diesen Befehl anwenden?Erhöhung der Befehl Timeout für SQL-Befehl

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

Sie sollten den Zeitüberschreitungswert auch zur Konfigurationsdatei hinzufügen, andernfalls würde jede Anpassung eine erneute Implementierung des Codes bedeuten. – christiandev

Antwort

73

dauert es diesen Befehl etwa 2 Minuten die Daten zurück, da es eine Menge von Daten ist

Bad-Design. Überlegen Sie, ob Sie hier Paging verwenden möchten.

Standardverbindungszeit beträgt 30 Sekunden, wie ich dieses

erhöhe Wie Sie eine timout auf Befehl zugewandt ist, daher müssen Sie die timout Ihrer sql command erhöhen. Sie können es in Ihrem Befehl angeben, wie diese

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

Sie sind willkommen, Sie können es dann akzeptieren. Obwohl ich mich ernsthaft davon abhalte, eine Abfrage zu verwenden, die 2 Minuten dauert. Verwenden Sie die Paginierung. – Ehsan

+0

Haben Sie den Nachteil, die Auszeit auf 10 Minuten oder 30 Minuten zu erhöhen? –

+0

@ManishKumarSingh Wer wartet 10 Minuten, bis eine Abfrage die Ergebnisse zurückgibt? Dies ist eine Ära von Millisekunden. – Ehsan

14

Zeitüberschreitung von SqlCommand hinzufügen. Bitte beachten Sie, dass die Zeit in der Sekunde liegt.

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

Vielen Dank für das Schreiben, "Bitte beachten Sie, dass die Zeit in der Sekunde ist." – ShaileshDev

+0

Irgendwelche Nachteile, die Zeitüberschreitung auf 10 Minuten oder 30 Minuten zu erhöhen? –

+0

Manish, möchten Sie 10 Minuten oder 30 Minuten für den Prozess warten, um die Daten zu erhalten? Wenn es ein Prozess über Nacht ist und es das einzige Ding ist und nirgendwo anders eingreifen wird, 30 Minuten warum nicht. Oder wenn Sie nicht auf das Ergebnis warten, warum nicht. – MiscellaneousUser

0

Da es 2 Minuten dauert zu reagieren, können Sie das Timeout auf 3 Minuten erhöhen

scGetruntotals.CommandTimeout = 180; 

Hinweis den Code unten durch Hinzufügen: der Parameter Wert ist in Sekunden.

0

Die Einstellung von CommandTimeout auf 120 wird nicht empfohlen. Verwenden Sie die Paginierung wie oben beschrieben. Die Einstellung von CommandTimeout auf 30 wird als normal betrachtet. Alles andere ist ein schlechter Ansatz und schließt normalerweise etwas mit der Implementierung aus. Jetzt läuft die Welt mit MiliSeconds Approach.

Verwandte Themen