#c# #asp.net #sql
#c# #asp.net #sql
Вопрос:
Я пытаюсь получить Score_Waarde
значение из моей базы данных, используя следующий код :
critid = critid_arr[teller2].ToString();
int scorehulp = 0;
string userid = Session["userid"].ToString();
SqlCommand cmd3 = new SqlCommand("SELECT Score_Waarde FROM Score WHERE Crit_ID = '" critid "' AND User_ID = '" userid "' ", con);
scorehulp = (int)cmd3.ExecuteScalar();
Когда я пытаюсь запустить это, я получаю следующую ошибку: Указанное приведение недопустимо.
Я не понимаю, почему я получаю эту ошибку, потому что critid
и userid
дают правильные значения.
Комментарии:
1. Какое значение возвращается при подключенном отладчике? Если оно не имеет типа
System.Int32
, то это приведет к ужасной смерти. (Например, если оно вернетlong
илиbyte
, это не сработает.) Лучший способ найти / исправить — это протестировать допущения; и использование отладчика здесь пропустит 20 шагов 🙂2. Вы могли бы попробовать Int32.Parse для строкового представления возвращаемого значения. Но будьте осторожны со
Null
значениями.Int32.Parse(cmd3.ExecuteScalar().ToString())
3. Вы должны проверить, что возвращаемое значение не является
DBNull
.4. Возможно, было бы неплохо объявить scorehulp как тип значения с возможностью обнуления (например,
int?
) на случай, если оценка пользователя не найдена.5. Почему у вас есть число в строковом поле ?
Ответ №1:
Вероятно, ваш SQL возвращает другой числовой тип, такой как long
или decimal
, или, по-видимому, string
.
Вызов Convert.ToInt32
, который не имеет ограничений приведения при распаковке.
Ответ №2:
Изначально я получал эту ошибку (мой код на C #
someobject.TotalItemCount = (Int32)dbManager.GetParameterValue("TotalRows"))
где TotalItemCount
было int
типа, даже несмотря на то, что SP был в порядке и давал надлежащий результат. Я избавился от этого, просто исправив SP, добавив следующий код
Set @TotalRows = @@rowcount.