2014-02-25 36 views
0

我正试图用新的超时值超载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的东西,但我的理解是,它只是传递一个值时它不期待一个。任何帮助将不胜感激。

+1

它重载一个方法,而不是类。 – Habib

+2

那么你使用这个解决方案有什么问题? – Servy

+0

好吧,你已经设置了第二个参数 –

回答

1

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

这里:

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

你给一个默认值TimeOut parameter.And,使该参数可选,这就是为什么你可以传递一个参数,这样调用函数:

SetData(sql.ToString()); 

另一个问题是你没有在你的函数中使用TimeOut值。可能你想设置你的命令的Timeout property

using (OdbcCommand cmd = new OdbcCommand(sql, cnn)) 
{ 
    cmd.CommandTimeout = TimeOut; 
    cmd.ExecuteNonQuery(); 
} 

而且它会更好,它定义你的OdbcConnectionusing声明,它会自动Dispose您的连接:

using (OdbcConnection cnn = GetConnection()) 
using (OdbcCommand cmd = new OdbcCommand(sql, cnn)) 
{ 
    cmd.CommandTimeout = TimeOut; 
    cmd.ExecuteNonQuery(); 
    CloseConnection(cnn); 
} 
+1

除了使用可选参数之外,他实际上还重载了该方法。 – Servy

+0

我现在该怎么做,这应该适当地改变默认'超时'为10分钟?另外感谢您将链接到可选参数的描述。 – user2405778

+0

@ user2405778你没有在你的函数的任何地方使用那个超时值 –

1

你的方法接受一个超时参数,但你继续忽略超时值和永不实际上将它传递给您的查询。它不能神奇地知道你打算将这个值用作超时值。您需要将命令的超时值设置为该参数中的值。

+0

谢谢您指出我的愚蠢错误以及解释其他项目的意见。 – user2405778