Невозможно привести объект типа 'System.Double' к типу 'System.String'. - PullRequest
1 голос
/ 16 января 2011
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 ]

7 голосов
/ 16 января 2011

Попробуйте с помощью

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

Если есть много строк для чтения, вы должны сделать GetOrdinal вне цикла, как

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

и использовать idxBalance позже.

2 голосов
/ 16 января 2011

Вы должны использовать

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();
  }

какова цель обновления пользовательского интерфейса на каждой итерации?пользователь ничего не видит в этом случае, в txtbalance.Text = val.ToString(); Вы просто показываете значение последней записи.Поэтому вместо того, чтобы извлекать элемент n из БД, в своем запросе выполните какой-то порядок и просто покажите первый элемент.

1 голос
/ 16 января 2011

Прочитайте это float сначала:

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

, а затем ToString() это:

txtbalance.Text = value.ToString();

и, если хотите, вы можете отформатировать его (например, в формате валюты ):

txtbalance.Text = value.ToString("C");
0 голосов
/ 16 января 2011

Попробуйте

 txtbalance.Text= value.toString();
0 голосов
/ 16 января 2011

Использование reader["Balance"].ToString()

...