2015-07-19 3 views
0

Я столкнулся с одной проблемой в последние несколько часов.C# System.InvalidCastException: Указанное Cast недействительно

Я продолжаю получать сообщение об ошибке, и он сообщает мне, что указанный состав недействителен. Я могу изменить значения в базе данных с помощью хранимой процедуры. Однако, когда я пытаюсь сделать это с исполняемым файлом, я получаю эту ошибку.

Это ошибка

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 поля к соответствующим типам значений из-за возможности нулей. Вы можете использовать типы с нулевым значением, но, скорее всего, объект вашей учетной записи не настроен на использование типов с нулевым значением.

Один из способов, вы можете попробовать справиться с этим, чтобы добавить нулевую проверку:

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"]); 
Смежные вопросы