我试图阻止SQL注入。我这样做了吗? (我使用MS Access。)我还应该使用sqlparameter
吗?
OleDbParameter[] myparm = new OleDbParameter[2];
myparm[0] = new OleDbParameter("@UserID", UserName.Text);
myparm[1] = new OleDbParameter("@Password", encode);
string queryStr = "SELECT * FROM TMUser WHERE UserID=@UserID AND Password=@Password";
OleDbConnection conn = new OleDbConnection(_connStr);
OleDbCommand cmd = new OleDbCommand(queryStr, conn);
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader();
答案 0 :(得分:1)
关闭!
string queryStr = "SELECT * FROM TMUser WHERE UserID=@UserID AND Password=@Password";
OleDbConnection conn = new OleDbConnection(_connStr);
OleDbCommand cmd = new OleDbCommand(queryStr, conn);
cmd.Parameters.AddWithValue("@UserID", UserName.Text);
cmd.Parameters.AddWithValue("@Password", encode);
参数是命令对象的一部分,您可以使用Parameters.AddWithValue
方法将参数值设置为您在查询字符串中定义的值。
顺便说一下,你应该使用using
语句来封装你的一些对象,这是我通常做的事情:
using (OleDbConnection conn = new OleDbConnection(_connStr))
using (OleDbCommand = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT ...";
cmd.Parameters.AddWithValue(...);
cmd.ExecuteReader();
//...
}
这样,如果内部出现问题或者在完成连接后关闭连接,您就不必担心清理资源。