2015-04-29 44 views
1

我试图阻止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 [email protected] AND [email protected]"; 

OleDbConnection conn = new OleDbConnection(_connStr); 
OleDbCommand cmd = new OleDbCommand(queryStr, conn); 

conn.Open(); 
OleDbDataReader dr = cmd.ExecuteReader(); 

回答

1

关闭!

string queryStr = "SELECT * FROM TMUser WHERE [email protected] AND [email protected]"; 

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(); 
    //... 
} 

这样,你就不必担心清理,如果一些资源在完成时出现错误或关闭连接。

+0

谢谢!欣赏建议。 –

相关问题