MySQL站点搜索中的参数化查询问题

时间:2013-09-19 09:09:13

标签: c# mysql asp.net sql sql-injection

我正在尝试使用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'";

1 个答案:

答案 0 :(得分:0)

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

我认为上面的代码中可能存在一些拼写错误 - 不确定这是否完全是从您的来源复制的 - 但是你可能会在循环时错过关闭}

此外,最好使用

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

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