我不断收到一个我不明白的错误。 必须声明标量变量“@varname”必须声明标量变量“@ UserName”
数十小时的研究,尝试了多种解决方案,但没有成功。
我的目标是创建一个使用2个文本框和一个按钮的登录页面,用于检查用户是否根据存储在Sql数据库中的信息退出。
这是我认为问题是来自:
private bool DBConnection(string userName, string password)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
//string cmdString = ("SELECT UserName, Password FROM Users WHERE UserName ='" + userName +
// "'AND Password ='" + password + "'"); //REMOVED AS THIS IS PRONE TO SQL INJECTIONS
string cmdString = ("SELECT * FROM Users WHERE UserName = @uname AND Password = @pw");
SqlCommand cmd = new SqlCommand(cmdString, conn);
cmd.Parameters.Add("uname", SqlDbType.VarChar).Value = userName;
cmd.Parameters.Add("pw", SqlDbType.VarChar).Value = password;
DataSet loginCredentials = new DataSet();
SqlDataAdapter dataAdapter;
try
{
if (conn.State.Equals(ConnectionState.Closed))
{
conn.Open();
dataAdapter = new SqlDataAdapter(cmdString, conn);
dataAdapter.Fill(loginCredentials);
conn.Close();
if (loginCredentials != null)
{
if (loginCredentials.Tables[0].Rows.Count > 0)
{
return true;
}
else
{
lblMessage.Text = "Incorrect Username or Password";
lblMessage.Visible = true;
}
}
}
}
catch (Exception err)
{
lblMessage.Text = err.Message.ToString() + " Error connecting to the Database // " + cmd.Parameters.Count;
lblMessage.Visible = true;
return false;
}
return false;
}
具体其中 “DataAdapter.Fill方法(loginCredentials);”正在执行。
注释掉的语句成功地使用正确的用户名和密码登录用户,但据我所知是不安全的,因为它容易sql注入,这就是为什么我想参数化sql语句。
任何帮助,将不胜感激。
,而不是'的DataAdapter =新SqlDataAdapter的(cmdString,康涅狄格州);' 使用'dataAdapter.SelectCommand = cmd;' –
请不要将您的错误作为链接发布到其他地方。 至于现在不可用。因此它可以防止任何人查看它。 – Richard
@Richard嗯。链接为我工作,但是,将img嵌入到问题中。至于说明理由,在当天你需要某些声望之前,你可以有图像的问题:) –