这是我在 Stackoverflow 的第一次。所以我只想问关于在 C# 中使用 ADO.NET 进行登录身份验证的问题。
就这样吧。
我偶然阅读了一本名为“Syngress - SQL 注入攻击和防御”的电子书,我对书中给出的示例有点困惑。
这是书中的示例代码,我对这些示例感到困惑
SqlConnection con = new SqlConnection(ConnectionString);
string Sql = "SELECT * FROM users WHERE username=@username" + "AND password=@password";
cmd = new SqlCommand(Sql, con);
// Add parameters to SQL query
cmd.Parameters.Add("@username", // name
SqlDbType.NVarChar, // data type
16); // length
cmd.Parameters.Add("@password",
SqlDbType.NVarChar,
16);
cmd.Parameters.Value["@username"] = username; // set parameters
cmd.Parameters.Value["@password"] = password; // to supplied values
reader = cmd.ExecuteReader();
我对“cmd.Parameters.Value”部分感到困惑,因为当尝试编码时,我的 IDE 中没有给出 Parameters.Value ..
所以我所做的是我正在使用 cmd.Parameters.AddWithValue("?cashieruser", cashieruser); 比 Parameters.Value 因为它在 Visual Studio 2010 的 IntelliSense 中找不到。
这是我的代码:
public bool isAuth(String cashieruser, String cashierpass)
{
bool IsAuth = false;
con.ConnectionString = conString;
String sql = "SELECT * FROM cashieraccount WHERE cashieruser = ?cashieruser" + "AND cashierpass = ?cashierpass";
MySqlCommand cmd = new MySqlCommand(sql, con);
//Add parameters to SQL Query
cmd.Parameters.Add("?cashieruser", MySqlDbType.VarChar, 35);
cmd.Parameters.Add("?cashierpass", MySqlDbType.VarChar, 15);
cmd.Parameters.AddWithValue("?cashieruser", cashieruser);
cmd.Parameters.AddWithValue("?cashierpass", cashierpass);
cmd.ExecuteScalar();
try
{
con.Open();
MySqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
IsAuth = true;
}
else
IsAuth = false;
}
finally
{
con.Close();
}
return IsAuth;
}
所以我得到了一个例外:“参数'?cashieruser'已经被定义。” 那么我将使用什么语法来设置参数并提供值? 顺便说一句,我正在使用它与 ADO.NET 一起使用的 MySQL