2013-02-07 47 views
-1

我希望這裏有人能夠幫助我或指引我朝着正確的方向前進。我想在C#中創建一個應用程序,我有2個類,DB_Connection和MainForm。 DB_Connection是連接數據庫的地方,MainForm是包含我的接口的主窗體。在表單之間傳遞字符串變量

我發現自己很難過,我試圖從我的DB_Connection窗體傳遞一個字符串到MainForm都沒有成功。這是應該做的是從數據庫中獲取一個查詢,將其分配給usr變量,並將該變量傳遞給MainForm,以便通過消息框收集(作爲示例),所有這些都通過單擊按鈕。

任何幫助表示讚賞,謝謝!

DB_Connection findUsrn方法:

public void findUsrn() 
    { 
     try { 
      conn.Open(); 
      if(conn.State.ToString() != "Open") 
      { 
       MessageBox.Show("Could not connect to the database"); 
       return; 
      } 
      else 
      { 
       sql = "SELECT First_Name FROM all_users"; 
       cmd = new MySqlCommand(sql, conn); 
       rdr = cmd.ExecuteReader(); 
       while (rdr.Read()) { 
       usr = rdr.GetString(0); 
       } 
       rdr.Close(); 
       conn.Close(); 
      } 
     } catch (Exception ex) { 
      MessageBox.Show(ex.Message); 
      return; 
      throw; 
     } 
    } 

的MainForm BtnSearchClick事件:

void BtnSearchClick(object sender, EventArgs e) 
    { 
     DB_Connection frmDB = new DB_Connection(); 
     string showUsr = frmDB.getString(); 
     MessageBox.Show(showUsr); 
    } 
+1

一對夫婦諮詢件無直接關係到Q :'conn.Open()'會在無法打開連接時拋出,因此在調用它之後不需要檢查狀態。如果你決定檢查它,不需要首先轉換爲字符串 - 比較它的一個'ConnectionState'枚舉成員,即。 'if(conn.State == ConnectionState.Open)'。最後,C#的可接受命名約定是用PascalCasing全文編寫成員名 - 您不需要這樣做,但它可以幫助其他人閱讀您的代碼。 – driis

+0

感謝您的提示,我已經刪除了部分代碼,如果數據庫脫機,它確實仍然會拋出異常:)但是,您是什麼意思的「成員」?我剛剛在大學學習時剛剛重新獲得C#,呃,我們只是說我離開了編程/編碼,現在只是重新考慮了整個主題。謝謝, – hectormtnezg

回答

1

findUsrn方法是void,所以它不返回任何東西。您的代碼讀取數據庫並將結果放入本地變量usr,但對此不做任何處理。由於usr是本地的,因此當該方法失去範圍時會丟失。你可以有方法返回一個字符串:

public string findUsrn() 

然後添加一個return語句(這應該是conn.Close()語句後右):

return usr; 
+0

真棒,感謝driss,我只是做了你所說的和它的工作,我能夠將字符串傳遞給MainForm並將其顯示在DialogBox上。 – hectormtnezg