我正在尝试使用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'";
答案 0 :(得分:0)
while(reader.Read()){
MyList.Add(new {
Value = reader["Value"].ToString()
});
我认为上面的代码中可能存在一些拼写错误 - 不确定这是否完全是从您的来源复制的 - 但是你可能会在循环时错过关闭}
此外,最好使用
using(MySqlDataReader Reader = cmd.ExecuteReader())
{
...
}
就像你为mySqlConnection对象所做的那样,以节省内存泄漏(但这不是你的问题。)