我正在尝试使用新的超时值重载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
的东西,但我的理解是它只是在没有期待的时候传递一个值。任何帮助将不胜感激。
答案 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)
您的方法接受超时参数,但随后您将继续忽略该超时值,并且永远不会将其实际传递给您的查询。它不能神奇地知道您打算将此值用作超时。您需要将命令的超时值设置为该参数中的值。