必须声明标量变量

当我尝试在我的应用程序中执行以下非查询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正确返回一个整数值,该Value被接受为@RateID参数的Value ,但是当我执行非查询时SqlCommand我得到上述错误。

任何帮助都非常感激。

你正在设置sqlCom对象 – 代码看起来很好。

但那时:似乎你只是在这里执行SQL命令:

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

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

参数和所有参数都包含在sqlCom对象中 – 但是你的cSqlQuery似乎并没有真正查看那个对象 – 只是SQL语句本身……

如果你使用这一行会发生什么:

 sqlCom.ExecuteNonQuery(); 

这是否毫无例外地工作?

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

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