必须声明标量变量

时间:2012-05-15 14:02:31

标签: c# sql

当我尝试在我的应用程序中执行以下非查询sql命令时,我总是收到错误消息 -

  

必须声明标量变量'@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正确返回一个整数值,该值被接受为{ {1}} Value参数的{1}},但是当我在@RateID上执行非查询时,我收到了上述错误。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

您正在设置sqlCom对象 - 代码看起来很好。

但是接下来:你似乎只是在这里执行SQL命令:

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

没有使用之前的所有设置代码!为什么呢?

参数和所有参数都包含在sqlCom对象中 - 但您的cSqlQuery似乎并没有真正查看该对象 - 只是SQL语句本身......

如果您使用此行,会发生什么:

sqlCom.ExecuteNonQuery();

这是否毫无例外地工作?

答案 1 :(得分:0)

您似乎将sqlText传递给cSqlQuery对象,但我相信您需要传递命令(sqlCom)。

我不确切知道cSqlQuery是如何工作的,但传递sqlText并不好。