Подтвердить что ты не робот

Ошибка "Указанный приведение недействительна" в программе форм окон С#

У меня ошибка "Указанный приведение недействительна". Приложение формы Windows в С#. Я пытаюсь получить значение из таблицы. Значение является либо маленьким, либо цифровым (я попробовал оба поля, оба дали мне ту же ошибку), и я пытаюсь сохранить его в переменной int.

здесь источник:

using (SqlDataReader rdr = cmd.ExecuteReader()) //"select * from table where fieldname = " + value
{

 while (rdr.Read())
 {
  int number = (int)rdr["quantity"]; // error is here
4b9b3361

Ответ 1

rdr["quantity"] будет чем-то в коробке. Если это не int, вы не можете его сразу удалить с помощью int (это то, что вы пытаетесь сделать), поскольку вам нужно сначала удалить его в соответствующий тип (например, short). Но это слишком громоздко, поэтому для ясности вам лучше сказать

Convert.ToInt32(rdr["quantity"]);

Ответ 2

  if(rdr["quantity"].GetType() != typeof(int))
    throw new InvalidOperationException(
      "quantity is a " + rdr["quantity"].GetType());
  int number = (int)rdr["quantity"]; // error is here

Ответ 3

Возможно, глупое предложение, но вы считаете, что пытаетесь это сделать - получить результат от вашего SqlDataReader как экземпляр object, а затем проверить, какой он тип? Никто не может лучше сказать, что это на самом деле, чем система CLR!: -)

using (SqlDataReader rdr = cmd.ExecuteReader()) 
{
    while (rdr.Read())
    {
        object obj = rdr["quantity"];

        if(obj != null)
        {
            string objType = obj.GetType().FullName;
        }
    }
 }

Если вы вернете значение обратно, вы можете проверить, какой тип он и, возможно, его конвертировать, в зависимости от ваших результатов.

Ответ 4

Я ставлю quantity is NULL, который не является целым числом.

Ответ 5

Попробуйте один из двух вариантов.

int number = rdr.getInt32(rdr.GetOrdinal("quantity"));

или

int number = int.parse(rdr["quantity"].ToString());

Ответ 6

Вы пробовали

int number=convert.toint16(rdr["quantity"]); 

Ответ 7

Поскольку вы сказали, что знаете, какое значение должно быть из-за того, что вы создали базу данных... Можете ли вы проверить, что значение rdr [ "quantity" ] имеет значение, а затем запустить синтаксический анализ try?

if(rdr["quantity"] != null) {
    int? number = null;
    if(int.TryParse(rdr["quantity"].ToString(), out number)) {
        Console.WriteLine("Hurray, I have an int. Up vote Coov!");
    }
}

Ответ 8

 sl_id = Convert.ToInt32(lblintroducerid.Text.ToString());
 sl_rank = Convert.ToInt32(lblassorank.Text.ToString());

Ответ 9

Попробуйте использовать SqlDataReader GetInt32()

rdr.GetInt32(rdr.GetOrdinal("quantity"));