これは、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);を使用していることです。Visual Studio 2010のIntelliSenseにないため、Parameters.Valueよりも。
これが私のコードです:
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を使用しています