ADO.NET запрос не возвращает данные из всех столбцов

#c# #.net #asp.net #ado.net #sql-server-express

#c# #.net #asp.net #ado.net #sql-server-express

Вопрос:

Работаю над небольшим проектом с VS2010 и SQLEXPRESS.

У меня есть следующая таблица с некоторыми введенными данными:

Поля таблицы

Когда я выполняю это:

 using (SqlConnection conn = new SqlConnection(connString)) {
    conn.Open();
    SqlCommand cmd = new SqlCommand("SELECT * FROM ACCOUNTS", conn);

    using (SqlDataReader reader = cmd.ExecuteReader()) {
        while (reader.Read()) {
            accountList.Add(new Account((int)reader["id"], (float)reader["number"], (AccountType)reader["type"], (string)reader["name"], (float)reader["balance"], (float)reader["maxdebit"], (int)reader["userId"]));
        }//Not tested
    } // Dispose Reader

    //do something here
} // Dispose implicitly called
  

Отладчик показывает мне следующее:

Вывод отладчика

По какой-то причине он получает только первые 4 столбца. Я никогда раньше не видел такого поведения, и код для его получения кажется хорошим. У кого-нибудь есть какие-либо подсказки для меня?

РЕДАКТИРОВАТЬ: проблема решена.

Проблема оказалась InvalidCastingException . По какой-то причине. Проблема с отображением только 4 элементов массива на самом деле не была проблемой, как оказалось. Переменная FieldCount указала 7 полей, что в точности соответствует таблице. Итак, все они были извлечены.

Мои данные таблицы выглядят следующим образом:

Ik0Ap.png (добавьте imgur, пожалуйста… нет изображений и только 2 гиперссылки, когда меньше 10 баллов репутации. Я отредактировал, чтобы показать, что это было решено, поэтому я отправляю… итак, у меня есть эта проблема)

Максимум 2 гиперссылки до 10 точек…

Там четко написано «float», поэтому я сделал приведение к float. Но, согласно отладчику VS, это двойное значение. Таким образом, приведение было недействительным. вздох

Так что это была основная проблема. Почему было показано только 4 части массива, для меня до сих пор остается загадкой… Может быть, настройка VS2010 для предотвращения печати массивов с тысячами объектов в отладчике?

Комментарии:

1. ошибка что отладчик показывает для других полей (userid и maxdebit)?

2. @Hogan: Ничего. И я не имею в виду NULL, я имею в виду, что их там нет. В отладчике. Эти 4 являются единственными в списке.

3. попробуйте reader[4] и reader[5] — что работает лучше?

4. @Hogan: не совсем. Как ни странно, Fieldcount указывает 7, что на самом деле так много. Я попытался изменить код, чтобы ожидать только объекты, это сработало. Теперь я имею дело с исключениями.

5. Вы должны иметь возможность посмотреть на объект в отладчике и увидеть тип. (Он будет справа в окне просмотра или инспектора.)

Ответ №1:

Попробуйте указать столбцы явно, как в:

 SELECT id, name, number, type, balance, ... etc.
  

Комментарии:

1. @Robert_Harvey: Попробовал, тот же результат. Сначала 4 столбца, а затем ничего. Я не понимаю…

2. Это ACCOUNTS представление, а не таблица? connString Указывает ли на правильную базу данных?

3. @Robert_Harvery: ACCOUNTS это действительно таблица, а не представление. Соединительная строка, которую я скопировал из проводника сервера, так что это должно быть хорошо.

4. Он выдает вам все столбцы в проводнике сервера? Как насчет SQL Server Management Studio Express? Это также возвращает все столбцы?

5. @Robert_Harvey: Да, я его установил. Выдает все столбцы.