Как исправить ошибку «Указанное приведение неверно» в C #? - PullRequest
3 голосов
/ 31 марта 2019

Проблема в том, что мне нужно показать список в моем приложении.

Я сделал тип SQL int для IsAdmin, как меня спросили, и в школе мне сказали, чтобы в приложении int show bool , точнее, чтобы было показано IsAdmin = True или False?

Но когда я запускаю приложение и когда я прохожу экран входа в систему, появляется исключение с сообщением:

"Указанный состав недействителен!"

Что мне нужно сделать?

  • Я пытался преобразовать это (bool)reader["IsAdmin"].ToInt32, но оно показывает ошибку.

  • Я попытался изменить его на целое число, но затем он показывает мне 1 и 0.

        public static List<Korisnik> GetAllUsers() {

            List<Korisnik> korisnici = new List<Korisnik>();
            Korisnik korisnik = null;

            using (SqlConnection conn = new SqlConnection()) {

                conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnString"].ToString();
                conn.Open();

                SqlCommand command = new SqlCommand("SELECT ID, UserName, UserPass, IsAdmin FROM Users01", conn);

                using (SqlDataReader reader = command.ExecuteReader()) {

                    while (reader.Read()){

                        korisnik = new Korisnik((int)reader["ID"], (string)reader["UserName"], (string)reader["UserPass"], (bool)reader["IsAdmin"]);
                        korisnici.Add(korisnik);

                    }

                }

            }

            return korisnici;

        }

1 Ответ

4 голосов
/ 31 марта 2019

Изменить эту строку:

korisnik = new Korisnik((int)reader["ID"], 
                        (string)reader["UserName"], 
                        (string)reader["UserPass"], 
                        (bool)reader["IsAdmin"]);

... чтобы:

korisnik = new Korisnik((int)reader["ID"], (string)reader["UserName"], 
                        (string)reader["UserPass"], 
                        ((int)reader["IsAdmin"]) > 0 ? true : false ); // convert from int to bool

Преобразование необходимо, потому что вы не можете просто назначить int для bool. Я предполагаю, что в базе данных все, что больше 0, означает, что пользователь является администратором.

Я знаю, что это домашнее задание, но в будущем гораздо лучше использовать логические типы в базе данных (в данном случае BIT), потому что

  1. они занимают меньше места в базе данных (более эффективно)
  2. делает это более очевидным что цель столбца является
  3. устраняет проблемы с конвертацией такие, которые размещены в вопросе

Расскажите подробнее о BIT

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