Вопрос:

C # - Логин неверен при выполнении запроса

c# .net

10 просмотра

1 ответ

8 Репутация автора

Я новичок в C # и изучаю запрос на открытие и закрытие, сейчас я выполняю правильный запрос, но не получаю правильный вывод. пожалуйста, посоветуйте мне, как решить эту проблему, спасибо.

Вот мой код запроса.

SqlCommand cmd = new SqlCommand("Select * from users Where username = @username and password = @password", sqlcon);
cmd.CommandType = CommandType.Text;

cmd.Parameters.AddWithValue("@username", txtUsername.Text);
cmd.Parameters.AddWithValue("@password", txtPassword.Text);

SqlDataReader dr = cmd.ExecuteReader();

sqlcon.Open();
cmd.ExecuteNonQuery();
sqlcon.Close();

if (dr.HasRows)
{
    Main objMain = new Main();
    this.Hide();
    objMain.Show();
}
else
{
    MessageBox.Show("Check your username and password");
}

Я получаю эту ошибку

System.InvalidOperationException: 'ExecuteReader требует открытого и доступного Соединения. Текущее состояние соединения закрыто.

Автор: code islife Источник Размещён: 11.08.2019 08:23

Ответы (1)


1 плюс

600185 Репутация автора

Вам нужно позвонить .ExecuteReader() после sqlcon.Open() - и почему вы тоже казните .ExecuteNonQuery()?? Вы уже выполняете запрос, вызывая .ExecuteReader()- это бесполезно и должно быть удалено ( ExecuteNonQueryдля операторов SQL, которые запускают INSERT, UPDATEили DELETE- но НЕ для случаев, когда у вас есть SELECTподобное здесь ...)

SqlCommand cmd = new SqlCommand("Select * from users Where username = @username and password = @password", sqlcon);
cmd.CommandType = CommandType.Text;

cmd.Parameters.AddWithValue("@username", txtUsername.Text);
cmd.Parameters.AddWithValue("@password", txtPassword.Text);

// open connection    
sqlcon.Open();

// execute reader and iterate over rows
SqlDataReader dr = cmd.ExecuteReader();

if (dr.HasRows)
{
    Main objMain = new Main();
    this.Hide();
    objMain.Show();
}
else
{
    MessageBox.Show("Check your username and password");
}   

// close connection only **AFTER** you've read the data!
sqlcon.Close();
Автор: marc_s Размещён: 11.08.2019 08:27
32x32