2013-08-06 13 views
13

Il valore predefinito CommandTimeout è 30 secondi. È possibile modificare manualmente il valore su un'istanza dell'oggetto di comando facendo seguitoImposta CommandTimeout predefinito personalizzato per tutti i nuovi oggetti comando

Dim cmd As New System.Data.SqlClient.SqlCommand 
cmd.CommandTimeout = 60 

C'è un modo per specificare un valore predefinito diverso, in modo tale che tutti i nuovi oggetti comando avranno automaticamente questo valore all'interno della vostra soluzione quando sono creati?

+0

[Domanda correlata] (http://stackoverflow.com/q/1001713/1178314) (Non contrassegnato come dup, ci sono alcune differenze significative in quelle domande imo, anche se la risposta s ad entrambi sono uguali.) –

risposta

10

Per quanto ne so, non c'è modo di modificare questo valore predefinito. Il codice di costruzione per una SqlCommand è questo:

public SqlCommand() 
{ 
    this.ObjectID = Interlocked.Increment(ref _objectTypeCount); 
    this._commandTimeout = 30; 
    this._updatedRowSource = UpdateRowSource.Both; 
    this._prepareHandle = -1; 
    this._rowsAffected = -1; 
    this._notificationAutoEnlist = true; 
    GC.SuppressFinalize(this); 
} 

Una possibile soluzione è quella di utilizzare uno SqlCommand predefinito passato come argomento al costruttore che accetta uno SqlCommand come argomento.

Così si potrebbe creare uno SqlCommand globale (un modello)

Dim commandTemplate60 = new SqlCommand() 
commandTemplate60.Timeout = 60 

e poi quando avete bisogno di un comando con un timeout di 60 secondi

Dim cmd As New System.Data.SqlClient.SqlCommand(commandTemplate60) 

Tuttavia, impostando direttamente il timeout, doesn Sembra che ci sia molto lavoro