没有为一个或多个必需参数给出值
no value given fr one or more required parameters
我正试图阻止 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();
关闭!
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();
//...
}
这样您就不必担心在内部出现问题时清理资源或在完成后关闭连接。
我正试图阻止 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();
关闭!
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();
//...
}
这样您就不必担心在内部出现问题时清理资源或在完成后关闭连接。