【问题标题】:How to fix "Specified cast is not valid" error in C#?如何修复 C# 中的“指定强制转换无效”错误?
【发布时间】:2019-08-21 13:11:27
【问题描述】:

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

我按照要求为IsAdmin 制作了一个SQL int 类型,在学校里他们告诉我在应用程序中制作该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;

        }

【问题讨论】:

  • 粘贴您的代码而不是图片,每个人都更容易
  • 数据库中有哪些数据类型?
  • @MichaelRandall 完成。
  • 您实际上并没有将用户密码存储在数据库中,是吗?
  • @xVenum.dll - 你可能需要找一所新学校。您不应该在任何地方存储密码。您应该始终使用盐对密码进行哈希处理,然后只存储哈希值。这样一来,如果您的数据库遭到入侵,就没有人知道密码是什么了。

标签: c# sql


【解决方案1】:

改变这一行:

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

Tell me more about BIT

【讨论】:

  • 你还需要在&gt; 0之前转换为int吗?
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2013-08-27
  • 1970-01-01
  • 2015-05-28
相关资源
最近更新 更多