c#系统.InvalidCastException:指定的Cast无效

本文关键字:Cast 无效 系统 InvalidCastException | 更新日期: 2023-09-27 18:03:36

这几个小时我一直在努力解决一个问题。

我一直得到一个错误,它告诉我指定的强制类型转换无效。我可以使用存储过程更改数据库上的值。然而,当我尝试使用可执行文件时,我得到了这个错误。

错误

System.InvalidCastException: Specified cast is not valid.
at Administrator_Panel.DB.ReadAccountInfo(String UserID, In32& Count)

这是代码。

 public static Account ReadAccountInfo(string UserID, out int Count)
 if (Reader.Read())
                ReturnValue = new Account((int)Reader["UserUID"],
                                            (string)Reader["Pw"],
                                            (bool)Reader["Admin"],
                                            (bool)Reader["Staff"],
                                            (short)Reader["Status"],
                                            (int)Reader["Point"],
                                            (int)Reader["DaemonPoints"]);

任何帮助都会很感激。:)谢谢你

c#系统.InvalidCastException:指定的Cast无效

看这个答案:如何(有效地)转换(强制转换?)一个SqlDataReader字段到它相应的c#类型?

您不能仅仅将SqlDataReader字段强制转换为相应的值类型,因为可能为空。你可以使用可空类型,但很可能你的Account对象没有设置为可空类型。

处理这个问题的一种方法是添加null检查:
 ReturnValue = new Account(Reader["UserUID"] == DBNull.Value ? 0 : (int)Reader["UserUID"] ,
                           Reader["Pw"] == DBNull.Value ? "" : Reader["Pw"].ToString(),
                           Reader["Admin"] == DBNull.Value ? false : (bool)Reader["Admin"],
                           Reader["Staff"] == DBNull.Value ? false : (bool)Reader["Staff"],
                           Reader["Status"] == DBNull.Value ? (short) 0 : (short)Reader["Status"],
                           Reader["Point"] == DBNull.Value ? 0 :  (int)Reader["Point"],
                           Reader["DaemonPoints"] == DBNull.Value ? 0 : (int)Reader["DaemonPoints"]);