使用新超时重载方法?

时间:2014-02-25 21:04:23

标签: c# timeout overloading

我正在尝试使用新的超时值重载static void方法。这是我正在使用的代码:

public static void SetData(StringBuilder sql)
    {
        SetData(sql.ToString());
    }

    public static void SetData(string sql, int Timeout = 600)
    {

        try
        {
            OdbcConnection cnn = GetConnection();
            using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
                cmd.ExecuteNonQuery();

            CloseConnection(cnn);
        }
        catch (Exception ex)
        {
            Form1.excelApp.Quit();
            MessageBox.Show("Error in SetData: " + ex.Message);
        }

    }

以下是使用的参考资料:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Text;
using System.Net;
using System.Windows.Forms;
using System.Threading.Tasks;

这是我第一次尝试overload的东西,但我的理解是它只是在没有期待的时候传递一个值。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您不只是在这里使用方法重载,而且还在使用optional arguments

下面:

public static void SetData(string sql, int Timeout = 600)

您正在为TimeOut参数提供一个默认值。这使得该参数可选,这就是为什么您可以通过传递一个参数来调用您的函数:

 SetData(sql.ToString());

另一个问题是你没有在你的函数中使用TimeOut值。可能你想设置你的Command Timeout property

using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
{
     cmd.CommandTimeout = TimeOut;
     cmd.ExecuteNonQuery();
}

最好在OdbcConnection语句中定义using,这将自动Dispose您的连接:

using (OdbcConnection cnn = GetConnection())
using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
{
    cmd.CommandTimeout = TimeOut;
    cmd.ExecuteNonQuery();
    CloseConnection(cnn);
}

答案 1 :(得分:1)

您的方法接受超时参数,但随后您将继续忽略该超时值,并且永远不会将其实际传递给您的查询。它不能神奇地知道您打算将此值用作超时。您需要将命令的超时值设置为该参数中的值。