0

我正在尝试使用 c# ASP.NET 和 MySQL 创建一个简单的站点搜索,并且我正在尝试使用参数化查询来防止 SQL 注入。那里已经有很多信息,但我仍然无法让它工作,任何人都可以看到我的代码有什么问题吗?有没有我没有引用的图书馆?

这是我当前的代码:

using MySql.Data.MySqlClient;

string q = Request["q"].IsEmpty() ? "" : Request["q"];

List<dynamic> MyList = new List<dynamic>();

using(MySqlConnection con = new MySqlConnection("server=localhost;database=database;user id=user;password=password"))
{
    string sql = "SELECT * FROM Items WHERE Name = @Name";
    con.Open(); 

    MySqlCommand cmd = new MySqlCommand(sql,con);
    cmd.Parameters.AddWithValue("@Name", q);        

    MySqlDataReader reader = cmd.ExecuteReader(); 

    while(reader.Read()){ 
        MyList.Add(new {
            Value = reader["Value"].ToString()
        });

    con.Close();

}

如果我将 sql 参数换成数据库中的实际值,它会返回项目,如下所示:

    string sql = "SELECT * FROM Items WHERE Name = 'aValue'";
4

1 回答 1

0
while(reader.Read()){ 
    MyList.Add(new {
        Value = reader["Value"].ToString()
    });

我认为上面的代码中可能有一些拼写错误 - 不确定这是否是从你的源代码中完全复制的 - 但你可能会错过一个结束 } for youe while 循环

此外,使用它是一个好习惯

  using(MySqlDataReader Reader = cmd.ExecuteReader()) 
  {
    ...
  }

就像您为 mySqlConnection 对象所做的那样以保存内存泄漏(但这不是您的问题。)

于 2013-09-19T14:46:08.940 回答