4

アプリケーションで次の非クエリ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正常に追加され、メソッドはパラメーターとして受け入れられる整数値を正しく返しますが、クエリ以外を実行すると、前述のエラーが発生します。sqlCommandNextIDValue@RateIDSqlCommand

どんな助けでも大いに感謝されます。

4

2 に答える 2

6

オブジェクトを設定していsqlComます - コードは問題ないようです。

しかし、それから:ここでSQLコマンドを実行しているようです:

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

以前のセットアップ コードをすべて使用する必要はありません。なんで?

パラメータとすべてがsqlComオブジェクトに含まれていますが、cSqlQuery実際にはそのオブジェクトを見ていないようです-SQLステートメント自体だけです...

代わりに次の行を使用するとどうなりますか:

sqlCom.ExecuteNonQuery();

これは例外なく機能しますか?

于 2012-05-15T14:09:17.050 に答える
0

sqlTextをcSqlQueryオブジェクトに渡しているようですが、コマンド(sqlCom)を渡す必要があると思います。

cSqlQueryがどのように機能するかは正確にはわかりませんが、sqlTextを渡すのは適切ではありません。

于 2012-05-15T14:13:09.347 に答える