我需要一些关于mysql的建议

时间:2017-03-04 18:18:54

标签: c# mysql

您好我正在尝试在C#中进行应用程序非常简单它有一个搜索栏(文本框)和一个按钮,我的目的是例如当我键入E1时我想显示来自MySql的项目。目前,当我键入E1时,我会收到一些错误,指出未知列“e1”。我将在下面发布我的代码:

public partial class MainWindow : Window
{
    MySqlConnection connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=pass;");
    MySqlCommand cmd;
    MySqlDataReader mdr;

    private void button_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            connection.Open();
            string selectRaspuns = "SELECT * FROM testdb.element WHERE name="+ userInput.Text;
            cmd = new MySqlCommand(selectQuery, connection);
            mdr = cmd.ExecuteReader();

            if (mdr.Read())
            {
                r1.GetDenumire(mdr.GetString("name"));
                r1.GetInformatii(mdr.GetString("info"));

                r1.Show();
            }
            else
            {
                MessageBox.Show("Error");
            }

        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
        }
        finally
        {
            connection.Close();
        }
    }
}

我想要,例如当我输入E1来显示我的mySql数据库信息时,关于存储在表元素列名中的E1信息,你能指出我做错了什么吗?谢谢

1 个答案:

答案 0 :(得分:0)

问题在于这行代码:

string selectRaspuns = "SELECT * FROM testdb.element WHERE name="+ userInput.Text;

当您连接" E1"的输入时,结果为:

  

SELECT * FROM testdb.element WHERE name = E1

由于您的字符串未被引用,MySql会将其解释为列名,因此您将获得"无效的列名称"错误。

至少,您必须添加引号,如下所示:

string selectRaspuns = "SELECT * FROM testdb.element WHERE name='" +  userInput.Text + "'";

通过执行此操作,生成的SQL为:

  

SELECT * FROM testdb.element WHERE name =' E1'

和MySql将解释" E1"作为一个字符串,这是你想要的。

也就是说,使用字符串连接创建SQL是一种不好的做法,可能会导致SQL注入漏洞。一旦你按照需要运行它,我强烈建议你回过头来用parameterized queries替换字符串连接。