Как исправить сбой экземпляра, используя SQL База данных в C# - PullRequest
1 голос
/ 05 мая 2020

Я заполняю форму входа после этого видео здесь: https://www.youtube.com/watch?v=tcmmCcMs8yU

Это мой код:

private void button2_Click(object sender, EventArgs e)
{
    this.Close();
}

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Hp\\Documents\\Data.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

    SqlDataAdapter sda = new SqlDataAdapter("'Select Count (*) From Login Where Username='" + textBox1.Text + "'and Password='" + textBox2.Text + "''" ,con);

    DataTable dt = new DataTable();
    sda.Fill(dt);

    if (dt.Rows[1][1].ToString() == "1")
    {
        this.Hide();
        Main ss = new Main();
        ss.Show();
    }
    else
    {
        MessageBox.Show("No Good");
    }
}

Моя проблема в sda.Fill(dt), где говорится, что у меня произошел сбой экземпляра.

Что я могу сделать, чтобы исправить это?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Похоже, у вас три проблемы:

Первая: когда вы начинаете строку подключения с @, вы не должны избегать обратных косых черт с помощью обратных косых черт. Либо удалите @, либо удалите all двойные обратные косые черты.

Другая проблема заключается в том, что ваш запрос SQL заключен в одинарные кавычки:

SqlDataAdapter sda = new SqlDataAdapter("'Select Count (*) From Login Where Username='" + textBox1.Text + "'and Password='" + textBox2.Text + "''" ,con);

Это должно сработать:

SqlDataAdapter sda = new SqlDataAdapter("Select Count (*) From Login Where Username='" + textBox1.Text + "'and Password='" + textBox2.Text + "'" ,con);

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

Edit

Как указывает @ bradbury9, dt.Rows[1][1] выдаст IndexOutOfRangeException. Строка только одна, поэтому она должна быть dt.Rows[0][whichever_zero_based_column_you_are_interested_in].

0 голосов
/ 05 мая 2020

Вы уверены, что у вас правильная строка подключения?

Вы пытались удалить двойной SLA sh между именем сервера и именем экземпляра базы данных в строке подключения?

Это из вашего кода: .\\SQLEXPRESS

Чтобы быть таким: .\SQLEXPRESS

Проверьте это: Ошибка экземпляра в asp. net

...