我们如何将CommandTimeout设置为类中的属性,当设置时,它将在DAL中全部生效

本文关键字:设置 DAL 全部 CommandTimeout 我们 属性 | 更新日期: 2023-09-27 18:19:29

我们如何将CommandTimeout设置为类中的属性,设置后它将在DAL 中全部生效

using (SqlCommand command = conn.CreateCommand())
{
  command.CommandTimeout = 60; //I need to make this globally. so all my timeout will have a 60 second
}

我也这样做了,但没有运气

public class Test : IDbCommand
{
    public void DoSomething()
    {
        CommandTimeout = 10;
    using (var sqlcon = new SqlConnection("Server=Server2;Database=;Trusted_Connection=true"))
    {
        using (var sqlcom =  sqlcon.CreateCommand())
        {
        }
    }
}
int _cto;
public int CommandTimeout
{
    get
    {
        return _cto;
    }
    set
    {
        _cto = value;
    }
}

我们如何将CommandTimeout设置为类中的属性,当设置时,它将在DAL中全部生效

您可以创建一个方法,从中返回SqlCommand对象,并可以在每个方法中使用它,这样每个命令都会有超时60;

public SqlCommand GetCommandObj()
{
        SqlCommand cmd=new SqlCommand();
        cmd.CommandTimeout=60;
        cmd.CommandText="your query here";
        return cmd;
}

您还可以设置命令对象的其他属性;

我认为最简单的解决方案是创建一个类,例如CommandFactory,它将只负责创建命令,并将在整个应用程序中全局使用。当然,这需要对源代码进行一定程度的重构,但这似乎并不复杂CommandFactory应该根据一些规则创建命令对象。在您的情况下,它会将CommandTimeout属性设置为60,但也可以设置其他属性。超时值可以硬编码,但更好的方法是从配置中读取它。这里有一个非常基本的例子:

public static class CommandFactory
{
    public static DbCommand CreateCommnad(DbConnection connection)
    {
        var cmd = connection.CreateCommand();
        cmd.CommandTimeout = ReadTimeoutFromConfig();
        //Set other properites to default values
        return cmd;
    }
}

...
using (var connection = new SqlConnection("Server=Server2;Database=;Trusted_Connection=true"))
{
    using (var command = CommandFactory.CreateCommnad(connection))
    {
        command.CommandText = "...";
        //Execute a command, read results etc.
    }
}
...