C# 在C中使用ADO.NET进行登录身份验证#
这是我第一次来这里。所以我只想问一个关于在C#中使用ADO.NET进行登录身份验证的问题 就这样 我偶然读到一本名叫《Syngress-SQL注入攻击和防御》的电子书,我对书中给出的例子有点困惑 这是书中的示例代码,我把它与示例混淆了C# 在C中使用ADO.NET进行登录身份验证#,c#,mysql,winforms,ado.net,C#,Mysql,Winforms,Ado.net,这是我第一次来这里。所以我只想问一个关于在C#中使用ADO.NET进行登录身份验证的问题 就这样 我偶然读到一本名叫《Syngress-SQL注入攻击和防御》的电子书,我对书中给出的例子有点困惑 这是书中的示例代码,我把它与示例混淆了 SqlConnection con = new SqlConnection(ConnectionString); string Sql = "SELECT * FROM users WHERE username=@username" + "AND password
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);因为在VisualStudio2010的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”已经被定义了。”
那么我将使用什么语法来设置参数和提供值呢?
顺便说一下,我正在使用MySQL,它与ADO.NET一起工作
cmd.Parameters.Add("?cashieruser", MySqlDbType.VarChar, 35);
将“?cashieruser”参数添加到cmd对象的参数集合中。由于参数已添加到集合中,因此可以按如下方式设置其值:
cmd.Parameters["?cashieruser"].Value = cashieruser;
或者,如果尚未使用Add方法将参数添加到集合中,则可以使用AddWithValue方法。首先,我认为您应该阅读以下示例代码:
cmd.Parameters["@username"].Value = username; // set parameters
cmd.Parameters["@password"].Value = password; // to supplied values
第二,由于您试图添加两次相同的参数名,因此会出现该异常。如果您使用
add()
方法添加参数,然后使用上面的语法设置应对问题进行排序的值。在第一个示例中出现错误。参数是使用索引的集合。正确的语法是:
cmd.Parameters["@username"].Value = username; // set parameters
cmd.Parameters["@password"].Value = password; // to supplied values
在第二个示例中,您尝试两次添加相同的参数您可以将创建和值设置与允许删除AddWithValue行的一行结合使用
//Add parameters to SQL Query
cmd.Parameters.Add("?cashieruser", MySqlDbType.VarChar, 35).Value = cashierUser;
cmd.Parameters.Add("?cashierpass", MySqlDbType.VarChar, 15).Value = cashierPass;
此外,还应删除cmd.ExecuteScalar。连接打开后运行ExecuteReader。 最后,这可能是一个打字错误。
在查询文本中,第一个where条件和查询的第二部分之间没有空格。(这里确实不需要连接字符串。)您还可以直接在查询中提到变量。像这样
string sQuery = "select * from cashieraccount where cashieruser =" + cashieruser + " and cashierpass =" + cashierpass;
SqlCommand cmd = new SqlCommand(sQuery, con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
//Login success code
}
else
{
//Login failed code
}