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