Я использую SqlDataReader для извлечения данных из SQL Server 2012 базов данных:SqlDataReader возвращает пустые вместо нуля для поля Int
SqlConnection connection = (SqlConnection)_db.Database.GetDbConnection();
await connection.OpenAsync();
SqlCommand command = new SqlCommand("dbo.[sp_MyStoredPrc] @InputId=1", connection);
var reader = await command.ExecuteReaderAsync();
if (reader.HasRows)
{
while (reader.Read())
{
int? var1 = (int?)reader["Column1Name"];
}
}
При чтении поля NULL int
из базы данных, reader["Column1Name"]
пустой так код запускает InvalidCastException во время выполнения.
Я попытался
reader.GetInt32(reader.GetOrdinal("Column1Name"))
, но это бросает System.Data.SqlTypes.SqlNullValueException.
Я также попытался
reader.GetSqlInt32(reader.GetOrdinal("Column1Name"))
который возвращает нуль, но тип SqlInt32
и не int?
, как я хочу.
я в конечном итоге делает
if (!reader.IsDBNull(reader.GetOrdinal("Column1Name")))
int? var1 = (int?)reader["Column1Name"];
, который работает.
Вопросы:
не более простой способ, чем вызов метода
IsDBNull
?Почему
reader["Column1Name"]
возвращение пустым вместоnull
, если значение дб NULL и поле являетсяint
?
Я не уверен, но попытаюсь использовать Convert.ToInt32 (reader ["Column1Name"]); – SergeyAn
Я получаю исключение, потому что Reader ["Column1Name"] пуст – devc2
Вы уверены, что значение db равно null? Он может быть пустым, но это не значит, что он равен нулю. В противном случае нет простого способа справиться с этим, чем проверить пустое значение. – SergeyAn