У меня есть столбец типа 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.
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-битное целое число, которое вы используете в своей таблице.
ReadInt64
требуется расширение или ссылка на сборку. Потому что он дает ошибку, которая Does not contain definition of ReadInt64
. Я использую базу данных PostgreSQL.
GetInt64
, а не ReadInt64
!
SQL BigInt
отображает long
в С#, а не int
.
В моем случае я получал " указанный приведение недействительным ", когда моя таблица была пустой.
поэтому я изменил свой код так:
while (reader.Read())
max = reader.GetInt32(0);
Добавлена проверка для DBNull
:
while (reader.Read())
max = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);