private void AddValue(string strValue)
{
//get the maximum id for Lists first
int MaxID = DataOperations.ReturnMaxIDInATable("Lists", connString);
int iSqlStatus = 0;
string query = "INSERT INTO Lists(ID, ListName, ListValue)
VALUES(@MaxID, @ListName, @ListValue)";
MaxID++;
OleDbConnection dbConn = new OleDbConnection(connString);
OleDbCommand dbComm = new OleDbCommand();
dbComm.Parameters.Clear();
try
{
dbComm.CommandText = query;
dbComm.CommandType = CommandType.Text;
OleDbParameter IDParam = new OleDbParameter();
IDParam.ParameterName = "@MaxID";
IDParam.OleDbType = OleDbType.BigInt;
IDParam.Value = MaxID;
dbComm.Parameters.Add(IDParam);
dbComm.Parameters.AddWithValue("@ListName", ListName);
dbComm.Parameters.AddWithValue("@ListValue", strValue);
dbComm.Connection = dbConn;
DataAccess.HandleConnection(dbConn);
iSqlStatus = Convert.ToInt16(dbComm.ExecuteNonQuery());
//Now check the status
if (iSqlStatus != 0)
{
//DO your failed messaging here
//return false;
}
else
{
//Do your success work here
//dbComm.
//return true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error inserting value in "
+ ListName + ","
+ strValue);
//return false;
}
finally
{
DataAccess.HandleConnection(dbConn);
}
}
回答
我相信你需要通過的OleDbCommand執行SQL時使用問號的參數(而的SqlCommand用途@)。示例:
INSERT INTO Lists (ID, ListName, ListValue) VALUES (?, ?, ?)
您只需要按照它們在SQL中出現的順序添加參數。
對於OleDb來說,它是計數的順序,而不是名稱 – 2011-05-03 13:41:48
但不僅是順序,而是*問號*代表OleDb的「參數」。 – 2011-05-03 13:44:16
我一直在使用@作爲代碼的其他部分的參數名稱,它的工作原理如此改變?應該是沒有意義的。但我會嘗試其他方式。此外,我認爲不會影響的順序,但我也會嘗試。 – 2011-05-05 20:30:17
下面的片段應該是:
IDParam.ParameterName = "MaxID";
IDParam.OleDbType = OleDbType.BigInt;
IDParam.Value = MaxID;
dbComm.Parameters.Add(IDParam);
dbComm.Parameters.AddWithValue("ListName", ListName);
dbComm.Parameters.AddWithValue("ListValue", strValue);
它不能解決OleDbCommand的問題。即使它對SqlCommand沒有任何影響。 – 2011-05-03 14:06:16
我以前試過BigInt,但沒有工作。但是還沒有嘗試不使用參數名稱的前綴。我也會嘗試這一個。 – 2011-05-05 20:31:22
參數上的前綴也不起作用。記住更多的解決方案? – 2011-05-16 12:42:50
這似乎這樣的伎倆..
string query = string.Format("INSERT INTO Lists(ID, ListName, ListValue)
VALUES({0}, '{1}', '{2}')", MaxID, ListName, strValue);
雖然我有所保留像什麼,如果我需要添加一個日期值?
不認爲注射是解決這個問題的正確方法 – 2013-06-27 10:02:01
如果您在查詢開始時的條款「聲明」,將工作:
string query = "DECLARE @MaxID as bigint, "+
" @ListName as Varchar(100), "+
" @ListValue As Varchar(100) " +
" INSERT INTO Lists(ID, ListName, ListValue) " +
" VALUES(@MaxID, @ListName, @ListValue)"
此外,正確的解決方案是改變你的驅動程序SQLCLIENT和OracleClient的。 OleDb不推薦與SQL 2005及更高版本一起使用。
- 1. 錯誤:必須聲明標量變量
- 2. 必須聲明標量變量錯誤
- 3. 必須聲明標量變量錯誤
- 4. 「必須聲明標量變量」 錯誤
- 5. 必須聲明標量變量「@Hlava」必須聲明標量變量「@Vaha」
- 6. 以編程方式聲明變量時「必須聲明標量變量」錯誤
- 7. 聲明後仍然'必須聲明標量變量'錯誤
- 8. 必須聲明標量變量/變量已經聲明
- 9. 必須聲明標量變量
- 10. 必須聲明標量變量「@Format」
- 11. 必須聲明標量變量「@ chkBeg1」
- 12. 必須聲明標量變量(SQL)
- 13. 必須聲明標量變量「@emp_id」
- 14. 必須聲明標量變量「@PreviousAmount」
- 15. 必須聲明標量變量「@User_Name」
- 16. 必須聲明標量變量「@dom」
- 17. 必須聲明標量變量「@useridaUPDATE」
- 18. 必須聲明標量變量
- 19. 必須聲明標量變量「@OUTSTANDINGSDATA」
- 20. 必須聲明標量變量?
- 21. MSSQL:必須聲明標量變量@rownum
- 22. 必須聲明一個標量變量
- 23. 必須聲明標量變量「@user」
- 24. 必須聲明標量變量?
- 25. 必須聲明標量變量@columns
- 26. 必須聲明標量變量「@ ??????」
- 27. 必須聲明標量變量@RECEIVABLESDATA
- 28. SQL:必須聲明標量變量
- 29. 必須聲明標量變量「@fecha」
- 30. 必須聲明標量變量@ TextBox1 asp.net
http://stackoverflow.com/questions/389591/dotnet-oledbparameters-name-obsession – 2011-05-03 13:49:01