字符串方法不从数据库

时间:2017-01-24 08:27:17

标签: c# mysql methods

我一直在努力使用以下方法,并且没有真正找到任何有用的东西。

我有一堆动态创建的文本框,文本框名称与我的数据库中的主键相关联,因此当该文本框出现时(按钮在正常操作条件下移动到相应的文本框),它使用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

需要注意的其他事项,_VALvarchar()数据类型,tbID是一个字符串,在数据库中它存储为varchar(),我疯了.ToString出于纯粹的挫败感。 (消除疑问),数据库很好,因为我正在向它写入数据,只需要将数据读取到那些框中。

我的表单上有很多文本框(每个文本框都有一个生成的名称,这也是我数据库中的主键),这就是我尝试以这种方式实现此方法的原因。

我想这样做(我是一个中级程序员),但是如果有一个更好的"在这个工作之后,我会接受这个选择。

我希望我已经包含了所有内容。

爱很多。

2 个答案:

答案 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。 最好在代码中编写存储过程而不是查询。