我需要为特定CommandTimeout
设置SqlCommand
属性。前提是,使用的主连接字符串和SqlConnection
无法更改。我喜欢定义超时值可配置。想知道在app.config(它是桌面应用程序)中定义它的良好和公平的做法吗?
答案 0 :(得分:3)
app.config
是这种设置的理想之地。也许是这样的:
<appSettings>
<add key="commandTimeout" value="2" />
</appSettings>
然后根据您如何利用它,在某个视角持续时间。也许是这样的:
var timeout = cnn.ConnectionTimeout;
var configTimeout = ConfigurationManager.AppSettings["commandTimeout"];
if (!string.IsNullOrEmpty(configTimeout))
{
timeout = Convert.ToInt32(configTimeout);
}
这当然可以存在于静态类中,例如:
public static class AppSettings
{
private static int _commandTimeout = -1;
public static int CommandTimeout
{
get
{
if (_commandTimeout != -1) { return _commandTimeout; }
var configTimeout = ConfigurationManager.AppSettings["commandTimeout"];
if (!string.IsNullOrEmpty(configTimeout))
{
_commandTimeout = Convert.ToInt32(configTimeout);
}
else
{
_commandTimeout = 1; // this is the default if the setting doesn't exist
}
return _commandTimeout;
}
}
}
然后你所要做的就是:
var timeout = AppSettings.CommandTimeout;
或者更简洁:
cmd.CommandTimeout = AppSettings.CommandTimeout;
答案 1 :(得分:0)
您可以在应用程序配置文件中使用CommandTimeout属性和时间参数。
connection = Factory.CreateConnection();
connection.ConnectionString = ConnectionString.ConnectionString;
connection.Open();
this.cmd = connection.CreateCommand();
cmd.CommandTimeout = ConfigurationManager.AppSettings["TimeConfigParam"];
答案 2 :(得分:0)
我将使用TimeSpan作为AppConfig选项值的类型来扩展@ mike-perrenoud的答案。对于进一步的调整,它更具可读性和可理解性。
可以通过Project Properties
-> Settings tab
添加该选项。这样代码就可以了
SqlCommand command = connection.CreateCommand();
command.CommandTimeout = (int)Properties.Settings.Default.SqlCommandTimeout.TotalSeconds;
app.config
<setting name="SqlCommandTimeout" serializeAs="String">
<value>00:05:00</value>
</setting>
属性/设置。
// generated by VS
<Setting Name="SqlCommandTimeout" Type="System.TimeSpan" Scope="Application">
<Value Profile="(Default)">00:05:00</Value>
</Setting>
Properties / Settings.Designer.cs
// generated by VS
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("00:05:00")]
public global::System.TimeSpan SqlCommandTimeout {
get {
return ((global::System.TimeSpan)(this["SqlCommandTimeout"]));
}
}