必须声明标量变量
当我尝试在我的应用程序中执行以下非查询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并不好。