Ошибка исключения System.Data.SqlClient.SQLException при нажатии кнопки1

#c# #sql #sql-server #database #exception

#c# #sql #sql-сервер #База данных #исключение

Вопрос:

Первое случайное исключение типа ‘System.Data.SqlClient.SQLException’ произошло в System.Data.dll

Дополнительная информация: недопустимое имя объекта ‘Login’.

Вот код :

 public partial class Form1 : MetroFramework.Forms.MetroForm
{
    public Form1()
    {
        InitializeComponent();
    }
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)v11.0;AttachDbFilename=C:UsersIgurekDocumentsDatabase.mdf;Integrated Security=True;Connect Timeout=30");
    private void metroButton1_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void metroButton2_Click(object sender, EventArgs e)
    {
        SqlDataAdapter sdf = new SqlDataAdapter("Select Count(*) From Login where Username='"   metroTextBox1.Text   "' and Password='"   metroTextBox2.Text   "'", con);
        DataTable dt = new DataTable();


        sdf.Fill(dt);  // <--------- Here's the exception
        if (dt.Rows.Count == 1)
        {
            Form1 f1 = new Form1();
            f1.Show();

        }
        else
        {
            MessageBox.Show("Sprawdz Nazwe i Haslo");
        }
    }
}
  

Скриншот:

описание изображения

Ответ №1:

Сообщение довольно ясное: у вас нет объекта (таблицы, представления) в вашей базе данных с именем Login . Ваш запрос пытается сделать выбор из этого объекта.

 Select Count(*) From Login where...
  

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

 SqlDataAdapter sdf = new SqlDataAdapter(
    "Select Count(*) From Login where Username=@UserName and Password=@Password", con);

command.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = metroTextBox1.Text;
command.Parameters.Add("@Password", SqlDbType.NVarChar).Value = metroTextBox2.Text;
  

Комментарии:

1. вау, спасибо, что приложили усилия. я слепой, и я не знаю, как изменить имя таблицы с «Table» на «Login» idk. brb

2. Спасибо, я был слеп или пьян (ха-ха) при добавлении вопроса. Я исправил это, удалив старые таблицы и создав новые с именем «Login»

Ответ №2:

попробуйте задать имя для вашего счета следующим образом:

     Select Count(*) as Nb From Login