C#System.InvalidCastException:指定的Cast无效

时间:2015-07-19 01:55:39

标签: c# sql

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

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

这是错误

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"]);

任何帮助将不胜感激。 :)谢谢

1 个答案:

答案 0 :(得分:1)

请参阅此答案:How to (efficiently) convert (cast?) a SqlDataReader field to its corresponding c# type?

由于可能存在空值,因此不能将SqlDataReader字段转换为相应的值类型。您可以使用可空类型,但可能您的Account对象未设置为可以为空的类型。

您可以尝试处理此问题的一种方法是添加空检查:

 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"]);