无法将“System.Double”类型的对象强制转换为“System.String”类型

时间:2011-01-16 12:22:13

标签: c# sql string casting double

SqlDataReader reader;

String sqlreadcom = "SELECT Balance FROM IncomeGenerator";

using (reader = new SqlCommand(sqlreadcom,sqlCon).ExecuteReader())
{
   if(reader.HasRows)
   {
      while(reader.Read())
      {
         String value = reader.GetString(reader.GetOrdinal("Balance"));
         txtbalance.Text = Convert.ToString(value);
      }
   }
}

我的Balance字段数据类型为float。我需要将其转换为字符串。

这是我正在收到的消息

  

无法投射类型的对象   输入'System.Double'   'System.String'

有人可以指导我让这个错误免费

5 个答案:

答案 0 :(得分:7)

尝试

object value = reader.GetValue(reader.GetOrdinal("Balance"));
txtbalance.Text = value.ToString();

如果要读取的行数很多,则应该在循环之外执行GetOrdinal,如

int idxBalance = reader.GetOrdinal("Balance");

稍后再使用idxBalance

答案 1 :(得分:2)

你应该使用

double val = reader.GetDouble(reader.GetOrdinal("Balance"));

并简单地转换它:

txtbalance.Text = val.ToString();

修改 当我再次看到您的代码时(如果您将其更改为以下代码):

  while(reader.Read())
  {
     var val = reader.GetDouble(reader.GetOrdinal("Balance"));
     txtbalance.Text = val.ToString();
  }

每次迭代中UI更新的目的是什么?用户在这种情况下看不到任何内容,在txtbalance.Text = val.ToString();中您只显示最后一个记录值。因此,不是从数据库中获取n项,而是在查询中执行某种顺序,只显示第一项。

答案 2 :(得分:1)

首先阅读float

float value = reader.GetFloat(reader.GetOrdinal("Balance"));

然后ToString()

txtbalance.Text = value.ToString();

如果您愿意,可以对其进行格式化(例如currency format):

txtbalance.Text = value.ToString("C");

答案 3 :(得分:0)

使用reader["Balance"].ToString()

答案 4 :(得分:0)

尝试

 txtbalance.Text= value.toString();