您好我正在尝试在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信息,你能指出我做错了什么吗?谢谢
答案 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替换字符串连接。