Switch Statement Issue при аутентификации пользователя и направлении его в соответствующее меню - PullRequest
1 голос
/ 06 апреля 2020
        private void btnSubmitt_Click(object sender, RoutedEventArgs e)
    {
        using (var conn = new SqlConnection("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;"))
        using (var cmd = conn.CreateCommand())

        {
            conn.Open();
            cmd.CommandText = "SELECT * FROM [Users] WHERE [TX_EMPLOYEE] = @userName";
            cmd.Parameters.AddWithValue("@userName", Environment.UserName);
            using (var reader = cmd.ExecuteReader())

                if (reader.HasRows.Count == 1)
                {
                        switch (reader.HasRows[0]["CD_EMP_TYPE"] as string)
                        {
                            case "0":
                                {
                                    Window1 AdminMenu = new Window1();
                                    AdminMenu.Show();
                                    this.Close();
                                    break;
                                }
                            case "1":
                                {
                                    MainWindow AnalystMenu = new MainWindow();
                                    AnalystMenu.Show();
                                    this.Close();
                                    break;
                                }
                            default:
                                {
                                    label1.Content = "SSO authentication unsuccessful. Please contact your database administrator";
                                    break;
                                }

                        }

                }

        }

    }

Я пытаюсь реализовать единый вход в систему и получаю сообщение об ошибке (reader.HasRows.Count == 1) и (reader.HasRows [0] ["CD_EMP_TYPE"] как строка) I Я также использовал (Row), и это не сработало.

1 Ответ

1 голос
/ 07 апреля 2020

Из документов :

SqlDataReader обеспечивает способ чтения потока только для пересылки строк с сервера SQL база данных.

Это означает, что вы не можете определить количество строк, возвращаемых вашим запросом, с помощью программы чтения.

Но тебе не нужно. Вы можете просто прочитать следующую строку, вызвав метод Read():

private void btnSubmitt_Click(object sender, RoutedEventArgs e)
{
    using (var conn = new SqlConnection("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;"))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = "SELECT TOP 1 CD_EMP_TYPE FROM [Users] WHERE [TX_EMPLOYEE] = @userName";
        cmd.Parameters.AddWithValue("@userName", Environment.UserName);
        using (var reader = cmd.ExecuteReader())
        {
            reader.Read();
            int CD_EMP_TYPE = reader.GetInt32(0);
            switch (CD_EMP_TYPE)
            {
                case 0:
                    {
                        Window1 AdminMenu = new Window1();
                        AdminMenu.Show();
                        this.Close();
                        break;
                    }
                case 1:
                    {
                        MainWindow AnalystMenu = new MainWindow();
                        AnalystMenu.Show();
                        this.Close();
                        break;
                    }
                default:
                    {
                        label1.Content = "SSO authentication unsuccessful. Please contact your database administrator";
                        break;
                    }
            }
        }
    }
}

Если ваш запрос может вернуть несколько строк, вы должны вызвать Read() в l oop. См. Ссылку на документацию выше для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...