Я продолжаю получать ошибку, которую я не понимаю. Должен объявить скалярную переменную «@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, свя); ' use' dataAdapter.SelectCommand = cmd; ' –
Пожалуйста, не публикуйте свою ошибку как ссылку на другое место. Пока что он недоступен. Поэтому он не позволяет кому-либо его просматривать. – Richard
@ Рихард Хмм. Ссылка работает для меня, но вложит img в вопрос. Что касается оправдания, то в тот же день вам нужна определенная репутация, прежде чем вы сможете получить изображения в вопросах :) –