>我正在尝试使用新的超时值重载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);
}
您的方法接受超时参数,但随后您继续忽略该超时值,并且从未实际将其传递给您的查询。 它无法神奇地知道您打算将此值用作超时。 您需要将命令的超时值设置为该参数中的值。