2017-01-24 38 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课程。 –

相关问题