我一直在努力使用以下方法,并且没有真正找到任何有用的东西。
我有一堆动态创建的文本框,文本框名称与我的数据库中的主键相关联,因此当该文本框出现时(按钮在正常操作条件下移动到相应的文本框),它使用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()
数据类型,tbID
是一个字符串,在数据库中它存储为varchar()
,我疯了.ToString
出于纯粹的挫败感。 (消除疑问),数据库很好,因为我正在向它写入数据,只需要将数据读取到那些框中。
我的表单上有很多文本框(每个文本框都有一个生成的名称,这也是我数据库中的主键),这就是我尝试以这种方式实现此方法的原因。
我想这样做(我是一个中级程序员),但是如果有一个更好的"在这个工作之后,我会接受这个选择。
我希望我已经包含了所有内容。
爱很多。答案 0 :(得分: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
答案 1 :(得分:0)
使用String[] array = null;
,我建议使用列名而不是SELECT * FROM table_raw WHERE id = @value;
,因为它会影响性能,在这种情况下您不能使用Alias。
最好在代码中编写存储过程而不是查询。