In my database, I have NextStatDistanceTime value as a float. When \"float time = reader.GetFloat(0);
\" line excecuted, it gives an error of
As you can read here a sql-server float maps to a .NET double, so you need to use GetDouble:
double totaltime = 0; // necessary, double is wider than float
// ...
while (reader.Read())
{
double time = reader.GetDouble(0);
totaltime = totaltime + time;
// conn.Close(); no, not in this loop, should be closed in the finally or via using-statement
}
My guess is that Database is returning double value, try getting it as Double
and convert it float
(if required).
float time= (float) reader.GetDouble(0);
while (reader.Read())
{
object initialTime = reader["NextStatDistanceTime"];
float time;
float.TryParse(initialTime.ToString(), out time);
totaltime = totaltime + time;
conn.Close();
}
Try this, this will get the time from the Database then convert it to a float, you can just put the reader["NextStatDistanceTime]
in the tryparse if you want but to make it clearer i have done it like this.
Any issues let me know
Probably is precision mismatch between database type and c# type.
Try cast like (float)reader.GetDouble(0);
Try this
convert.ToSingle(reader["NextStatDistanceTime"])
or do
double value = (double)reader["NextStatDistanceTime"]
Float of sql is equivalent to double of c#, you can see the similar mapping here
It's time for a little table, I think.
T-SQL type name | .NET equivalent | C# type name | DataReader method |
---|---|---|---|
FLOAT |
System.Double |
double |
IDataReader.GetDouble() |
REAL |
System.Single |
float |
IDataReader.GetFloat() |
Note that GetFloat
has the wrong name -- it should be GetSingle
, because float
is a C#-specific name. It makes no sense in VB.NET, for example.
So, if your database column is of type FLOAT
, read it using GetDouble
, not GetFloat
. The data reader methods do not perform conversions; there is a generic GetValue
method to get the value as an object
that you can then convert further.
Incidentally, this is not the only subtlety -- the .NET floating-point types support denormalized values, whereas the T-SQL types do not, so it is possible to have floating-point numbers in your .NET code that can't be successfully stored in the database, even if the types match.