使用新的超时重载方法



>我正在尝试使用新的超时值重载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某事,但我的理解是,它只是在意想不到的时候传递一个值。任何帮助将不胜感激。

您在这里不仅使用方法重载,还使用 optional arguments

这里:

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

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

 SetData(sql.ToString());

另一个问题是您没有在函数中使用超时值。您可能想设置命令的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);
}

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

最新更新