Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否使用新超时重载方法?_C#_Timeout_Overloading - Fatal编程技术网

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);
}