0

我需要CommandTimeout为特定的SqlCommand. 前提是主连接字符串和SqlConnection正在使用的字符串不能更改。我喜欢将超时值定义为可配置的。想知道在 app.config(它是一个桌面应用程序)中定义它是否是好的和公平的做法?

4

3 回答 3

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;
于 2013-08-06T17:41:25.233 回答
0

您可以在应用程序配置文件中使用 CommandTimeout 属性和时间参数。

connection = Factory.CreateConnection();
connection.ConnectionString = ConnectionString.ConnectionString;
connection.Open();

this.cmd = connection.CreateCommand();
cmd.CommandTimeout = ConfigurationManager.AppSettings["TimeConfigParam"];
于 2013-08-06T17:42:56.933 回答
0

我将使用 TimeSpan 作为 AppConfig 选项值的类型来扩展@mike-perrenoud 的答案。对于进一步的调整,它更具可读性和可理解性。该选项可以通过Project Properties->添加Settings tab。所以代码会喜欢

SqlCommand command = connection.CreateCommand();
command.CommandTimeout = (int)Properties.Settings.Default.SqlCommandTimeout.TotalSeconds;

应用程序配置

<setting name="SqlCommandTimeout" serializeAs="String">
  <value>00:05:00</value>
</setting>

属性/设置.settings

// generated by VS
<Setting Name="SqlCommandTimeout" Type="System.TimeSpan" Scope="Application">
  <Value Profile="(Default)">00:05:00</Value>
</Setting>

属性/设置.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"]));
  }
 }
于 2018-12-12T15:09:36.777 回答