2013-08-26 10 views
36

Ho un piccolo problema e spero che qualcuno possa darmi qualche consiglio. Sto facendo funzionare un comando di SQL, ma sembra che richiede questo comando circa 2 minuti per restituire i dati poiché ci sono molti dati. Ma il tempo di connessione predefinito è 30 secondi, come posso aumentarlo e applicarlo a questo comando?Aumento del timeout di comando per il comando 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

Considera di aggiungere anche il valore di timeout al file di configurazione, altrimenti qualsiasi regolazione significherebbe la ridistribuzione del codice. – christiandev

risposta

73

ci vogliono questo comando circa 2 minuti per restituire i dati in quanto v'è un sacco di dati

cattivo design. Prendi in considerazione l'utilizzo del paging qui.

tempo di connessione di default è di 30 secondi, come faccio a aumentare questo

Come si trovano ad affrontare un timout sul vostro comando, quindi, è necessario aumentare la timout del sql command. È possibile specificare nel vostro comando come questo

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

sei il benvenuto, puoi accettarlo allora. Sebbene io mi astenga seriamente dall'usare una query che richiede 2 minuti. prova ad usare la paginazione. – Ehsan

+0

Qualche svantaggio di aumentare il timeout a 10 minuti o 30 minuti? –

+0

@ManishKumarSingh Chi attenderà per 10 minuti che una query restituisca i risultati? Questa è un'era di millisecondi. – Ehsan

14

Aggiungi il timeout del SqlCommand. Si prega di notare che il tempo è al secondo.

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

Grazie per aver scritto, "Per favore, l'ora è al secondo." – ShaileshDev

+0

Qualche svantaggio di aumentare il timeout a 10 minuti o 30 minuti? –

+0

Manish, vorresti aspettare 10 minuti o 30 minuti perché il processo ottenga i dati? Se è un processo notturno e la sua unica cosa e non interferirà da nessun'altra parte, 30 minuti perché no. O se non stai aspettando il risultato, perché no. – MiscellaneousUser

0

Poiché ci vogliono 2 minuti per rispondere, è possibile aumentare il timeout a 3 minuti aggiungendo il codice qui sotto

scGetruntotals.CommandTimeout = 180; 

Nota: il parametro il valore è in secondi.

0

Non è consigliabile impostare CommandTimeout su 120. Prova ad usare la paginazione come menzionato sopra. L'impostazione di CommandTimeout su 30 è considerata normale. Qualunque cosa in più è considerare un approccio errato e di solito si conclude con qualcosa di sbagliato nell'implementazione. Ora il mondo è in esecuzione su MiliSeconds Approach.

Problemi correlati