我们如何将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;
}
}
您可以创建一个方法,从中返回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.
}
}
...