如何修复C#中的“指定的强制转换无效”错误?

问题描述 投票:3回答:1

问题是,我需要在我的应用程序中显示一个列表。

当我被问到时,我为int制作了一个SQL IsAdmin类型,并且在学校他们告诉我在应用程序中使用int show bool,更准确地说是显示IsAdmin = TrueFalse

但是当我启动应用程序时,当我通过登录屏幕时,异常显示消息:

“指定演员阵容无效!”

我需要做什么?

  • 我尝试转换这个(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;

        }
c# sql
1个回答
4
投票

改变这一行:

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. 消除了问题中发布的转换问题

Tell me more about BIT

© www.soinside.com 2019 - 2024. All rights reserved.