Вопрос по sql, c# – Должен объявить скалярную переменную

4

Когда я пытаюсь выполнить следующую команду sql без запроса в моем приложении, я всегда получаю сообщение об ошибке -

Must declare the scalar variable '@RateID'

Я немного растерян, почему я получаю эту ошибку. Вот мой код:

string sqlText = "INSERT INTO tblRates (RateID, IPName, RateName, Rate, DateFrom, DateTo, Active) " +
                 "VALUES (@RateID, @IPName, @RateName, @Rate, @DateFrom, @DateTo, @Active);";

SqlCommand sqlCom = new SqlCommand(sqlText);
sqlCom.Parameters.Add("@RateID", SqlDbType.Int);
sqlCom.Parameters.Add("@IPName", SqlDbType.Text);
sqlCom.Parameters.Add("@RateName", SqlDbType.Text);
sqlCom.Parameters.Add("@Rate", SqlDbType.Decimal);
sqlCom.Parameters.Add("@DateFrom", SqlDbType.Date);
sqlCom.Parameters.Add("@DateTo", SqlDbType.Date);
sqlCom.Parameters.Add("@Active", SqlDbType.Bit);

this._rateID = NextID();

sqlCom.Parameters["@RateID"].Value = this._rateID;

if (this._ipName == "All")
{
   sqlCom.Parameters["@IPName"].Value = DBNull.Value;
}
else
{
   sqlCom.Parameters["@IPName"].Value = this._ipName;
}

sqlCom.Parameters["@RateName"].Value = this._rateName;
sqlCom.Parameters["@Rate"].Value = this._rate;
sqlCom.Parameters["@DateFrom"].Value = this._dateFrom;
sqlCom.Parameters["@DateTo"].Value = this._dateTo;

this._active = true;
sqlCom.Parameters["@Active"].Value = this._active;

cSqlQuery cQ = new cSqlQuery(sqlText, "non query");

Когда я шаг за шагом, я вижу параметр@RateID успешно добавлен вsqlCommand объект, методNextID правильно возвращает целочисленное значение, которое принимается какValue из@RateID параметр, но когда я выполняю не запрос наSqlCommand Я получаю вышеупомянутую ошибку.

Любая помощь очень ценится.

Было бы очень полезно, если бы вы показалиwhere вы получаете исключение ... Jon Skeet
Вы настраиваете большойSqlCommand объект - но кажется, что вы прямо выполняетеsqlText только - кажется, вы не используетеsqlCom объект вообще ..... marc_s
ты используешь oledb? daryal

Ваш Ответ

2   ответа
0

вы передаете sqlText в свой объект cSqlQuery, но я считаю, что вам нужно передать команду (sqlCom).

Я не знаю точно, как работает cSqlQuery, но передача sqlText не годится.

6

sqlCom объект - и код выглядит хорошо.

Но потом: кажется, вы просто выполняете команду SQL здесь:

cSqlQuery cQ = new cSqlQuery(sqlText, "non query");

не использовать весь тот код установки, который у вас был раньше! Зачем?

Параметры и все они содержатся вsqlCom объект - но вашcSqlQuery кажется, на самом деле не смотрит на этот объект - только сам SQL-оператор ...

Что произойдет, если вы используете эту строку вместо:

sqlCom.ExecuteNonQuery();

Это работает без исключения?

Error: User Rate Limit Exceeded PJW

Похожие вопросы