C# 是否使用新超时重载方法?
我试图用一个新的超时值重载一个C# 是否使用新超时重载方法?,c#,timeout,overloading,C#,Timeout,Overloading,我试图用一个新的超时值重载一个静态void方法。以下是我正在使用的代码: public static void SetData(StringBuilder sql) { SetData(sql.ToString()); } public static void SetData(string sql, int Timeout = 600) { try { OdbcConnection cnn
静态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;
这是我第一次尝试
重载
一些东西,但我的理解是,它只是传递了一个值,而它并没有期望值。任何帮助都将不胜感激。您不仅在这里使用方法重载,还使用了
在这里:
您为TimeOut
参数提供了一个默认值。这使得该参数成为可选参数,这就是为什么您可以通过如下方式传递一个参数来调用函数:
SetData(sql.ToString());
另一个问题是您没有在函数中使用超时值。您可能希望设置命令的:
另外,如果您在中使用语句定义OdbcConnection
,该语句将自动处理您的连接,则会更好:
using (OdbcConnection cnn = GetConnection())
using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
{
cmd.CommandTimeout = TimeOut;
cmd.ExecuteNonQuery();
CloseConnection(cnn);
}
您的方法接受一个timeout参数,但随后您继续忽略该超时值,并且从未实际将其传递给您的查询。它无法神奇地知道您打算将此值用作超时。您需要将命令的超时值设置为该参数中的值。它重载的是一个方法,而不是类。那么这个解决方案有什么问题?您已经为第二个设置了默认值parameter@Servy我遇到的问题是,我对c#中超时的理解,除非另有说明,否则超时设置为最长30秒。我试图在代码中执行一个存储过程,该过程通常需要超过30秒。我试图重载一个方法,使其在失败之前最多运行10分钟。30秒后仍然失败。@user2405778颜色不同,因为您使用了不正确的命名约定,并且此处的颜色采用了正确的命名约定。它真的应该从小写的t
开始。除了使用可选参数之外,他实际上也在重载该方法。我现在的情况如何,这是否应该正确地将默认的超时
更改为10分钟?还感谢您将我链接到可选参数的描述。@user2405778您没有在函数中使用该超时值anywhere@Selman22这…这将是一个很好的理由来解释它为什么不工作。@user2405778查看我的更新,是的,如果你将超时设置为600,那么它将根据文档将默认超时设置为10分钟。谢谢你指出我的愚蠢错误和你解释其他项目的评论。
using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
{
cmd.CommandTimeout = TimeOut;
cmd.ExecuteNonQuery();
}
using (OdbcConnection cnn = GetConnection())
using (OdbcCommand cmd = new OdbcCommand(sql, cnn))
{
cmd.CommandTimeout = TimeOut;
cmd.ExecuteNonQuery();
CloseConnection(cnn);
}