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

时间:2014-08-27 07:27:38

标签: c# asp.net .net sqlcommand

我们如何将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;
    }
}

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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.
    }
}
...