Ошибка "Указанный приведение недействительна" в программе форм окон С#
У меня ошибка "Указанный приведение недействительна". Приложение формы Windows в С#. Я пытаюсь получить значение из таблицы. Значение является либо маленьким, либо цифровым (я попробовал оба поля, оба дали мне ту же ошибку), и я пытаюсь сохранить его в переменной int.
здесь источник:
using (SqlDataReader rdr = cmd.ExecuteReader()) //"select * from table where fieldname = " + value
{
while (rdr.Read())
{
int number = (int)rdr["quantity"]; // error is here
Ответы
Ответ 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"));