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

时间:2019-03-31 01:06:08

标签: c# sql

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

我被要求为int创建一个SQL 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 个答案:

答案 0 :(得分: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的用户都表示该用户是管理员。

我知道这是一个家庭作业问题,但接下来,最好在数据库中使用 boolean 类型(在这种情况下为BIT),因为

  1. 他们在数据库中占用的空间更少(效率更高)
  2. 使更明显是该列的目的是什么
  3. 消除转化问题,例如问题
  4. 中发布的问题

Tell me more about BIT