2

float として宣言されている EarlyHoursStartTime というデータベース列があります。

次に、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 のときに無効なキャスト例外が発生するのはなぜですか? datareader によって読み取られるデータベース フィールドは Float ですが、何が問題なのですか?

4

2 に答える 2

9

マッピングリストによると

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

GetDoubleSQL float は double データ型にマップされるため、代わりに使用してみてくださいGetFloat

于 2012-12-12T15:52:15.647 に答える
0

やってみませんか

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

すべてを変換すると問題が少なくなるので、テントは元の場所を使用する傾向がありません(ほとんどの場合)

よろしく

于 2012-12-12T13:14:13.447 に答える