2013-08-06 12 views
13

Der Standardwert CommandTimeout beträgt 30 Sekunden. Sie können den Wert manuell auf einer Instanz des Objekts Befehl ändernBenutzerdefiniertes Standard-CommandTimeout für alle neuen Befehlsobjekte festlegen

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

die folgenden, indem Sie Gibt es eine Möglichkeit, einen anderen Standardwert angeben, so dass alle neuen Befehlsobjekte diesen Wert automatisch innerhalb Ihrer Lösung haben werden, wenn Sie sind erstellt?

+0

[Verwandte Fragen] (http://StackOverflow.com/q/1001713/1178314) (Nicht als dup kennzeichnen, gibt es einige signifikante Unterschiede in diesen Fragen imo, auch wenn Antwort s zu beiden sind gleich.) –

Antwort

10

Soweit ich weiß, gibt es keine Möglichkeit, diesen Standard zu ändern. Der Konstruktor Code für einen SqlCommand ist dies:

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); 
} 

Eine mögliche Abhilfe ist ein vordefiniertes SqlCommand als Argument für den Konstruktor übergeben zu verwenden, die eine SqlCommand als Argument annimmt.

So könnte man eine globale SqlCommand (eine Vorlage)

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

und dann erstellen, wenn Sie einen Befehl mit einem Timeout von 60 Sekunden benötigen

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

jedoch direkt die Timeout-Einstellung, doesn Es scheint eine Menge Arbeit zu sein