Указанный приведен неверно в C #

1

У меня есть столбец типа bigint в таблице базы данных. Я хочу, чтобы он извлекал и назначал его переменной на С#, как показано ниже в примере.

Пример:

obj.Total1 = (Int32)reader["Slno"] != null ? (Int32)reader["Slno"] : 0;
obj.Total2 = (Int32)reader["Rlno"] != null ? (Int32)reader["Rlno"] : 0;

Примечание. Здесь Slno и Rlno имеют тип bigint в таблице базы данных.

Ошибка: следующее сообщение об ошибке.

Specified cast is not valid.
  • 0
    Какие значения вы хотите привести точно?
  • 0
    Что такое Total1 и 2 типа?
Показать ещё 2 комментария
Теги:

3 ответа

2
Лучший ответ

BigInt необходимо сопоставить с long что эквивалентно 64-битовому целочисленному значению в С#.

Кроме того, вы должны изменить свой код на следующее:

int slnoCol = reader.GetOrdinal("Slno");
int rlnoCol = reader.GetOrdinal("Rlno");

obj.Total1 = !reader.IsDBNull(slnoCol) ? reader.GetInt64(slnoCol) : (long)0;
obj.Total2 = !reader.IsDBNull(rlnoCol) ? reader.GetInt64(rlnoCol) : (long)0;

РЕДАКТИРОВАТЬ:

Заметив ваш комментарий, что Total1 и Total2 являются int, вам также необходимо изменить их на long

public long Total1 { get; set; }
public long Total2 { get; set; }

Это связано с тем, что int представляет собой 32-битное целое число, которое не может хранить то же самое максимальное значение, что и 64-битное целое число, которое вы используете в своей таблице.

  • 0
    Для ReadInt64 требуется расширение или ссылка на сборку. Потому что он дает ошибку, которая Does not contain definition of ReadInt64 . Я использую базу данных PostgreSQL.
  • 1
    @Meem - мой плохой, печатать его без двойной проверки, метод называется GetInt64 , а не ReadInt64 !
Показать ещё 1 комментарий
3

SQL BigInt отображает long в С#, а не int.

  • 0
    Огромное спасибо.
1

В моем случае я получал " указанный приведение недействительным ", когда моя таблица была пустой.

поэтому я изменил свой код так:

while (reader.Read())
    max = reader.GetInt32(0);

Добавлена проверка для DBNull:

while (reader.Read())
    max = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню