为所有新命令对象设置自定义默认CommandTimeout

Kyl*_*Mit 14 .net vb.net sqlcommand sqlclient command-timeout

默认的CommandTimeout值为30秒.您可以通过执行以下操作手动更改命令对象实例上的值

Dim cmd As New System.Data.SqlClient.SqlCommand
cmd.CommandTimeout = 60
Run Code Online (Sandbox Code Playgroud)

有没有办法指定不同的默认值,以便所有新命令对象在创建时在解决方案中自动具有此值?

Ste*_*eve 10

据我所知,没有办法改变这个默认值.SqlCommand的构造函数代码是这样的:

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);
}
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方法是使用预定义的SqlCommand作为参数传递给以SqlCommand作为参数的构造函数.

所以你可以创建一个全局SqlCommand(一个模板)

 Dim commandTemplate60 = new SqlCommand()
 commandTemplate60.Timeout = 60
Run Code Online (Sandbox Code Playgroud)

然后当你需要一个超时为60秒的命令

Dim cmd As New System.Data.SqlClient.SqlCommand(commandTemplate60)
Run Code Online (Sandbox Code Playgroud)

但是,直接设置超时,似乎并没有很多工作