Member 12688019 Ответов: 2

Неправильный синтаксис рядом с "электронной почтой"


я новичок в sql. Я предполагаю, что напишу код, который позволит мне проверить ввод пользователя на наличие электронной почты и пароля в базе данных.


Ниже приведен код, который я написал

protected void btnLogin_Click(object sender, EventArgs e)
    {
        string strEmail, strPwd, strSel;
        int intShopperID;
        DatabaseMgmt loginObj = new DatabaseMgmt();
       //read e-mail and password that are entered in the textboxes
        strEmail = emailTextBox.Text.ToLower();
        strPwd = pwdTextBox.Text.Trim();
        strSel = "SELECT ShopperID" +
            "FROM Shopper" +
            "WHERE Email = '" + strEmail + "'" +
            "AND Passwd = '" + strPwd + "'";

        SqlDataReader dR = loginObj.ExecuteSelect(strSel);
        



            if (dR.Read())
            {
                intShopperID = 1;
                Session["shopperID"] = intShopperID;
                Response.Redirect("Default.aspx");
            }

            else
            {
                intShopperID = 0;
                lblMsg.Text = "Incorrect email or password!";
                lblMsg.ForeColor = System.Drawing.Color.Red;
            }
        
    }


Что я уже пробовал:

я не знаю, как продолжить отсюда :(

2 Ответов

Рейтинг:
8

njammy

В вашем SQL нет пробелов в правильных местах.

Также смотрите мой пример ниже, чтобы увидеть лучший способ выбора данных запроса с использованием пользовательского ввода в SQL, чтобы избежать SQL-инъекции:

string userEmail = "test@email.com", userPassword = "abc123";
		
		// Your SQL:
		Console.WriteLine("SELECT ShopperID" + "FROM Shopper" + "WHERE Email = '" + "a@b.com" + "'" + "AND Passwd = '" + "password" + "'");
		// Outputs: SELECT ShopperIDFROM ShopperWHERE Email = 'a@b.com'AND Passwd = 'password'
		
		// Better way to do it:
		string sql = "SELECT ShopperID FROM Shopper WHERE Email = {0} AND Passwd = {1}";
		string emailParameter = "@Email", passwordParameter = "@Password";
		string formattedSql = string.Format(sql,emailParameter,passwordParameter);
		Console.WriteLine(formattedSql);
		
		// Use parameterised sql command
		SqlCommand cmd = new SqlCommand(formattedSql);
		cmd.Parameters.Add(new SqlParameter(emailParameter,userEmail));
		cmd.Parameters.Add(new SqlParameter(passwordParameter,userPassword));
		
		SqlDataReader dr = cmd.ExecuteReader();
		// Continue your code...


Member 12688019

Это интервал кода. Спасибо!

Рейтинг:
1

F-ES Sitecore

Вам нужно научиться пользоваться отладчиком

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Проверьте содержимое ваших переменных, таких как strSel, что они содержат?

SELECT ShopperIDFROM ShopperWHERE Email = 'me@here.com'AND Passwd = '123456'


Это действительный SQL?

Также читайте об использовании параметризованных запросов для построения SQL-кода, поскольку ваш код может быть открыт для атак SQL-инъекций.


sja63

Я думаю, что его лучше использовать:

стреножил = emailTextBox.Текст.Нижестоящим().Отделка();