Member 10632254 Ответов: 3

как решить синтаксическую ошибку (отсутствующий оператор) в выражении запроса '(Username ='aa') = (Password'aa')'.


Эй, ребята, я новичок в программировании и запустил систему регистрации с использованием базы данных access, но получаю ошибку syntex. я много искал в интернете, но не получил, как решить plz help...
мой код таков
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Final
{
    public partial class Login : Form
    {
        private OleDbConnection connection = new OleDbConnection();
        public Login()
        {
            InitializeComponent();
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\SunilK\Desktop\Final\Final\DB\Login.accdb;
Persist Security Info=False;";
        }

        private void Login_Load(object sender, EventArgs e)
        {
            try
            {
                connection.Open();

                CHKConn.Text = "Connected Sucessfully";

                connection.Close();
            }
            catch (Exception snk)
            {
                MessageBox.Show("Error  " + snk);
            }
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            connection.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "select count(*) from [LoginDB] where (Username ='" + txtUsername.Text + "') = (Password'" + txtPassword.Text + "')";

            OleDbDataReader reader = command.ExecuteReader();
            int count = 0;
            while (reader.Read())
            {
                count = count + 1;
            }

            if (count == 1)
            {
                MessageBox.Show("Login Sucessfully");
            }
            else
            {
                MessageBox.Show("Login unSucessfully");
            }
            connection.Close();
        }
    }
}


заранее спасибо за вашу помощь

3 Ответов

Рейтинг:
21

Dave Kreskowiak

Поскольку вы не используете параметризованные запросы ваш результирующий SQL оператор выглядит следующим образом:

select count(*) from [LoginDB] where (Username ='username') = (Password'password')

Видите что-нибудь неправильное в этом утверждении?

Из-за конкатенации строк вы не видите проблемы в своем коде. Вместо этого используйте параметризованные запросы, и код станет намного легче читать.
CommandText = "Select COUNT(*) FROM [LoginDB] WHERE Username = @username AND Password = @password";


Google для "параметризованных запросов C#" для гораздо большего обсуждения и примеров.

Google для "SQL-инъекции", чтобы узнать, почему то, что вы сейчас делаете, настолько небезопасно и опасно.

Google для "как хранить пароли", чтобы узнать, почему хранение паролей в обычном тексте делает вашу проблему безопасности еще хуже.


George Jonsson

Вы меня опередили, и к тому же с гораздо лучшим объяснением.

PIEBALDconsult

(Не говоря уже о доступе.)

Member 10632254

спасибо, что получил ответ ...

Рейтинг:
16

George Jonsson

Эта строка выглядит неправильной

command.CommandText = "select count(*) from [LoginDB] where (Username ='" + txtUsername.Text + "') = (Password'" + txtPassword.Text + "')";

пробовать
command.CommandText = "select count(*) from [LoginDB] where (Username ='" + txtUsername.Text + "') AND (Password ='" + txtPassword.Text + "')";


[Редактировать]
Удален лишний знак цитирования перед паролем


Member 10632254

я пытаюсь командовать.CommandText = "select count(*) from [LoginDB] where (Username ='" + txtUsername.Text + "') и ('Password ='" + txtPassword.Текст + "')"; но все равно ошибка....

George Jonsson

Смотрите мое обновление.

Member 10632254

большое вам спасибо ... наконец-то вы знаете, что такое ошибка ... теперь я знаю, что это была глупая ошибка ... но спасибо

George Jonsson

Не кори себя слишком сильно.
Очень легко разочароваться, ослепнуть и упустить очевидное.
Возьмите чашку кофе, прогуляйтесь, сходите в ванную и понюхайте розы.
Это помогает сделать перерыв, а затем вернуться к проблеме с обновленным умом.

Рейтинг:
0

Member 14796688

Уважаемый сэр/мадам
Я пытался выполнить приложение много раз, но все еще не работает он показывает сообщение синтаксическая ошибка (отсутствует оператор) пожалуйста, помогите мне, как решить эту проблему

Большое спасибо!!


частный недействительными btnSave_Click(объект отправителя, EventArgs в электронной)
{
//таблица покупок

{
строка str = "вставить в продажи (счет-фактура,CustomerName,SaleDate,TotalAmt,НДС,скидка,TotalPayAmt,оплачено,баланс) значения ("+ Invoice_tx.Текст +", '"+ CustomerName_cb.Текст +"', '" + SaleDate_dt.Value.Date.ToString() +"', "+ TotalAmnt_tx.Текст +", "+ VAT_tx.Текст +", "+ Discount_tx.Текст +", "+ TotalPayAmnt_tx.Текст +", "+ Paid_tx.Текст +", "+ Balance_tx.Текст +") ";

OleDbDataAdapter da = новый OleDbDataAdapter(str, conn);
//DataSet ds = новый набор данных();
DataTable dt = новый DataTable();
да.Заполнить(ДТ);

}


CHill60

Если у вас есть вопрос, то используйте красную ссылку "задать вопрос" в верхней части страницы. Не размещайте вопросы или комментарии в качестве "решений" к сообщению другого участника.
Это в ваших интересах - больше людей увидят ваш вопрос и, возможно, смогут помочь. Они также должны будут где-то ответить решением.
Я предлагаю вам удалить этот пост, чтобы избежать downvotes