2017-01-24 43 views
1

我一直在努力與下面的方法一段時間,並沒有真正發現任何使用。字符串方法不從數據庫中的表返回值

我有一堆動態創建的文本框,文本框名稱與我的數據庫中的主鍵相關聯,所以當文本框出現時(在正常操作條件下,按鈕移到適當的文本框中)使用textbox.name作爲字符串方法的輸入,希望該方法將從數據庫返回相應的值並將其分配給文本框。

現在,我沒有收到任何錯誤,但它總是返回一個空字符串,或者如果我用任何變量聲明瞭字符串,那麼它會在文本框中顯示該變量,告訴我在文本框中顯示數據工作正常,我的問題在於我的方法。

public string DisplayValues(string BID) 
    { 
     string result = string.Empty; 
     using (MySqlConnection myCon = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = root")) 
     { 
      using (MySqlCommand myCmd = new MySqlCommand("SELECT * FROM table_raw WHERE id = '@value';", myCon)) 
      { 
       try 
       { 
        myCon.Open(); 
        myCmd.Parameters.AddWithValue("@value", BID); 
        using (MySqlDataReader myRead = myCmd.ExecuteReader()) 
        { 
         while (myRead.Read()) 
         { 
          result = myRead.GetString("_VAL").ToString(); //looks for column _VAL where id = the methods input value. 
         } 
         myRead.Close(); 
        } 
       } 
       catch (MySqlException e) 
       { 
        MessageBox.Show(e.ToString()); 
       } 
       finally 
       { 
        myCon.Close(); 
       } 
      } 
     } 
     return result; 
    } 

再次,我沒有得到任何錯誤,我只是沒有得到任何數據到我的文本框中。

實現: textbox.text = DisplayValues(tbID); //tbID is declared elsewhere

因此正在發生的事情是,文本框中顯示空白。

當我改變string result = string.Empty;string result = "1"然後將文本框顯示1

這就是我已經和正在發生的事情,我想要什麼(如果不是明顯)是使textbox.text顯示的數據在我的數據庫_VAL列在主鍵相當於textbox.name

其他注意事項,_VAL是一個varchar()數據類型,​​是一個字符串,在數據庫中它被存儲爲varchar(),我快要瘋了用.ToString出於純粹的挫折感。 (消除疑問),數據庫是好的,因爲我正在向它寫入數據,只需要現在讀取那些數據到那些盒子。

我的表單上有很多文本框(每個文本框都帶有一個生成的名稱,這也是我數據庫中的主鍵),這就是爲什麼我要以這種方式實現此方法的原因。

我想這樣做(我是一箇中等程度的程序員),但如果有一個「更好」的方式,我會在這個工作後招待那個選項。

我希望我已經包括了一切。

太愛了。

回答

4

而不是

SELECT * FROM table_raw WHERE id = '@value'; 

使用

SELECT * FROM table_raw WHERE id = @value; 

否則您正在搜索的字符串'@value',而不是傳遞的參數。

側面說明:Bad habits to kick : using SELECT */omitting the column list

+0

有趣的是,我使用的是列名,我通常會這樣做,但將其更改爲*是因爲我沒有得到我的結果。但是謝謝你......這個作品,我認爲它可能是簡單的。 -gugs和拖船 –

0

使用SELECT * FROM table_raw WHERE id = @value;,我會建議使用列名代替*,因爲它會影響性能,你不能在這種情況下使用別名。 更好地編寫存儲過程而不是代碼中的查詢。

+0

謝謝,是的,我的大部分東西都是自學的,但我正忙於做一些專門用於存儲過程和觸發器的mysql課程。 –

相關問題