2012-05-15 5975 views
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被成功添加到sqlCommand對象,該方法NextID正確返回其被接受爲@RateIDValue的整數值參數,但是當我在SqlCommand上執行非查詢時,出現上述錯誤。

任何幫助非常值得讚賞。

+0

您使用的是oledb嗎? – daryal

+6

你正在設置一個很大的'SqlCommand'對象 - 但好像你只是直接執行'sqlText' - 你似乎根本沒有使用'sqlCom'對象..... –

+0

It如果你能顯示*你在哪裏得到例外,那麼這真的會有幫助... –

回答

6

您正在設置sqlCom對象 - 並且代碼看起來很好。

但後來:看來你只是執行SQL命令的位置:

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

不使用你之前有這樣的設置代碼!爲什麼?

的參數和所有的都包含在sqlCom對象 - 但你cSqlQuery似乎並沒有真正看那個物體 - 僅僅是SQL語句本身......

如果您使用此行,而不是會發生什麼:

sqlCom.ExecuteNonQuery(); 

這個工作沒有例外嗎?

+1

是的 - 這是一個明顯的例子,沒有看到樹木的木材 - 謝謝你。 – PJW

0

你似乎傳遞sqlText到你的cSqlQuery對象,但我相信你需要傳遞命令(sqlCom)。

我不知道cSqlQuery的工作原理,但傳遞sqlText並不好。