2014-02-25 33 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