过去几个小时我一直在努力解决一个问题。
我一直收到错误,它告诉我指定的强制转换是无效的。我可以使用存储过程更改数据库上的值。但是,当我尝试使用可执行文件时,我得到了该错误。
这是错误
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"]);
任何帮助将不胜感激。 :)谢谢
答案 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"]);