Соединение между базой данных Oracle и C#

#c# #oracle11g

#c# #oracle11g

Вопрос:

Я пытаюсь создать простую страницу входа в систему с помощью Visual Studio win form. У меня есть имя пользователя и пароль в качестве элементов управления текстовым полем.

вот событие, которое должно проверить, есть ли такой пользователь в базе данных:

 if (con.State != ConnectionState.Open)
        {
            con.Open();
        }
        OracleCommand cmd = con.CreateCommand();
        cmd.CommandText = "select staff_username, staff_password from staff_accounts";
        cmd.CommandType = CommandType.Text;
        OracleDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            if (dr.HasRows)
            {
                if (username.Text == dr["staff_username"].ToString() amp;amp; pass.Text == dr["staff_password"].ToString())
                {
                    admin.ShowDialog();
                }
                else
                {
                    label1.Text = "Error";
                }
            }
        }
  

dr.HasRows возвращает false, поэтому это означает, что cmd.CommandText = "select staff_username, staff_password from staff_accounts"; не возвращает строк, но в моей базе данных тот же запрос работает нормально.

мы будем признательны за любую помощь.

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

1. Что вы подразумеваете под «не работает»? Пожалуйста, напишите, какое исключение вы получаете?

2. Никаких исключений не появляется. Просто ничего не происходит

3. он должен либо открыть новую форму, либо изменить текстовое значение label1 на error

4. Я предполагаю, что это причина cmd. CommandText … например, когда ему присваивается значение «выбрать 5 1 из dual», это работает, но когда ему присваивается значение «выбрать staff_username, staff_password из staff_accounts», он не возвращает строк

5. Я проверил это в своей базе данных, кажется, там все в порядке. он возвращает все

Ответ №1:

Вы должны проверить HasRows свойство перед вызовом метода reader Read() . Попробуйте:

  if (dr.HasRows)
 {
   while (dr.Read())
   {
     ....
  

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

1. Еще лучше, просто не проверяйте HasRows вообще. В случае пустого результирующего набора Read вернет false , полностью пропуская цикл.

2. @Alejandro, я полностью согласен, но я просто оставляю проверку HasRows, поскольку OP использует ее