Указанное приведение недействительно с GetFloat на SQLDataReader

У меня есть столбец базы данных с именем EarlyHoursStartTime, который объявлен как float.

Затем у меня есть код, в котором я перебираю всю таблицу с помощью DataReader.

SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (myReader.Read())
{

    cmdInsertLocation.Parameters.AddWithValue("@EarlyHoursStartTime", myReader.GetFloat(44)); <- Error here


}

Я получаю сообщение об ошибке в строке AddwithValues ​​выше.

"Указанный состав недействителен."

myReader.GetValue(44) показывает значение 0,0, когда это происходит.

Я пробовал всевозможные вещи, чтобы обойти это, например, вместо этого вместо этого вводить значение по умолчанию, если:

if (Convert.ToString(myReader.GetValue(44)) == "0.0")

но это должно быть ненужным, и это все равно не работает.

Почему я получаю недопустимое исключение приведения, когда значение равно 0,0? Поле базы данных, прочитанное устройством чтения данных, равно Float, так в чем проблема?


person iKode    schedule 12.12.2012    source источник
comment
Я думаю, вам следует использовать GetDouble как эквивалент Число с плавающей запятой SQL двойное   -  person V4Vendetta    schedule 12.12.2012
comment
@ V4Vendetta, похоже, решило проблему. Вы хотите включить это в ответ, чтобы я мог отметить его как правильный?   -  person iKode    schedule 12.12.2012


Ответы (2)


Согласно списку сопоставлений.

SQL Server data type CLR data type (SQL Server) CLR data type (.NET Framework)
float                SqlDouble                  Double

SQL float сопоставляется с двойным типом данных, поэтому вы должны попробовать использовать GetDouble вместо GetFloat

person V4Vendetta    schedule 12.12.2012

почему бы не попробовать

float _float = Convert.ToSingle(myReader[FloatCol].tostring());

Я не склонен использовать локации Oridnal, так как считаю, что преобразование всего рендеринга менее проблематично (большую часть времени).

С Уважением

person Marcus Davies    schedule 12.12.2012