如何修复 C# 中的“指定强制转换无效”错误?
Posted
技术标签:
【中文标题】如何修复 C# 中的“指定强制转换无效”错误?【英文标题】:How to fix "Specified cast is not valid" error in 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 - 你可能需要找一所新学校。您不应该在任何地方存储密码。您应该始终使用盐对密码进行哈希处理,然后只存储哈希值。这样一来,如果您的数据库遭到入侵,就没有人知道密码是什么了。 【参考方案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
),因为
-
它们在数据库中占用更少空间(更高效)
使其更清楚该列的目的是什么
消除了转换问题,例如在问题中发布的
Tell me more about BIT
【讨论】:
你还需要在> 0
之前转换为int
吗?以上是关于如何修复 C# 中的“指定强制转换无效”错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 CORS 错误:ASP .NET C# 中的 MethodDisallowedByPreflightResponse