2013-03-21 30 views
-1

我想從此方法返回一個變量。 是的,我確實使它靜態字符串。並嘗試返回Messagebox.Show所在的變量。我甚至有同樣的變量,並試圖返回它。但我似乎無法從括號內返回。而且我不能讓括號內的變量返回。該怎麼辦?該代碼使用MessageBox工作,但我需要字符串變量。從一段時間返回變量條件

static void rsnREAD(string dbTbl) 
    { 
     OleDbConnection machStopDB = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Users\sgarner\Google Drive\Visual Studio 2012\Write_to_db\Write_to_db\Machine_Stop.accdb"); 
     //string sDate; 
     //sDate = DateTime.Now.ToString("MM/dd/yyy HH:mm:ss"); 
     string str = "SELECT LAST(REASON) AS lastREASON FROM "+dbTbl+""; 
     OleDbCommand rdCmd = new OleDbCommand(str, machStopDB); 
     try 
     { 
      machStopDB.Open(); 
      OleDbDataReader reader = rdCmd.ExecuteReader(); 
      while (reader.Read()) 
      { 
       MessageBox.Show(reader[0].ToString()); 
      } 
      reader.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      machStopDB.Close(); 
     } 
     machStopDB.Close(); 
    } 
+0

您試圖檢索哪個值?讀者的第一個價值?持續? – 2013-03-21 21:55:08

+0

爲什麼你不顯示你實際上試圖返回一個變量的代碼。這個方法有一個'void'結果,這意味着它不會返回任何東西,並且不符合你的描述。 – NotMe 2013-03-21 21:56:37

+3

其他評論:不要通過在每個函數中都有連接字符串來重複自己(如果實際上您確實有這樣的其他函數)。不要在db調用中顯示最終用戶的內部錯誤細節或混合UI問題,即'MessageBox.Show(ex.Message);' – 2013-03-21 22:05:05

回答

3

只需創建try塊外String變量,並設置它,當你閱讀從數據庫中的值。還要將方法的返回類型更改爲string而不是void。您可以使用if而不是while,因爲您只讀取數據庫中的一個值。

static string rsnREAD(string dbTbl) 
    { 
     string result = string.Empty; 
     using(var machStopDB = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Users\sgarner\Google Drive\Visual Studio 2012\Write_to_db\Write_to_db\Machine_Stop.accdb"); 
     { 
     string str = "SELECT LAST(REASON) AS lastREASON FROM "+dbTbl+""; 
     OleDbCommand rdCmd = new OleDbCommand(str, machStopDB); 
     try 
     { 
      machStopDB.Open(); 
      using(var reader = rdCmd.ExecuteReader()) 
      { 
      if(reader.Read()) 
      { 
       result = reader[0].ToString(); 
      } 
      } 
     } 
     catch (Exception ex) // Sample only. Catch only ones you need. 
     { 
      MessageBox.Show(ex.Message); 
     } 
     } 
     return result; 
    } 

因此,如果返回的值爲空字符串,那麼數據庫爲空或出現錯誤。

+0

我們也可以在最後消除冗餘的machStopDB.Close(),因爲它被finally塊覆蓋。 – 2013-03-21 21:59:36

+0

@BrianRogers是的,沒有注意到。更改 – 2013-03-21 22:00:08

+2

爲什麼不從內部返回if?可以說不是那麼好的風格,但是對於成功和失敗也有單獨的回報。 – hyde 2013-03-21 22:06:06