#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: Да, я его установил. Выдает все столбцы.