[英]C# failed to update a record in msaccess database
Sqlcon.Open();
嗨,當我運行此腳本時,我的更新無法正常工作,這是我第一次使用MSACCESS作為數據庫,請幫助我如何更新,謝謝
var _query = "update [Inventory_tbl] set [Item Name] = ?, [Description] = ?, [Price] = ?, [Stock] = ? where [Item Code] = ?";
var cmd = new OleDbCommand(_query, Sqlcon) { CommandType = CommandType.Text };
cmd.Parameters.AddWithValue("[Item Code]", getitemcode);
cmd.Parameters.AddWithValue("[Item Name]", getitemname);
cmd.Parameters.AddWithValue("[Description]", getdesc);
cmd.Parameters.AddWithValue("[Price]", getprice);
cmd.Parameters.AddWithValue("[Stock]", Convert.ToString(Convert.ToInt32(myStock) - Convert.ToInt32(getquantity)));
var ctr = cmd.ExecuteNonQuery();
Sqlcon.Close();
MessageBox.Show(ctr.ToString());
}
在MS-Access中,參數以聲明順序添加到OleDbCommand
中。
對於您的情況,您可以將getitemcode
值添加到“ Item Name
列中,我認為它最后屬於“ Item Code
”。
當CommandType設置為Text時,OLE DB .NET Provider不支持將命名參數傳遞給SQL語句或OleDbCommand調用的存儲過程的命名參數。 在這種情況下,必須使用問號(?)占位符。 例如:
SELECT * FROM Customers WHERE CustomerID =
?的情況下SELECT * FROM Customers WHERE CustomerID =
因此,將OleDbParameter對象添加到OleDbParameterCollection的順序必須直接對應於命令文本中參數的問號占位符的位置。
我認為您的代碼應該像;
var _query = "update [Inventory_tbl] set [Item Name] = ?, [Description] = ?, [Price] = ?, [Stock] = ? where [Item Code] = ?";
var cmd = new OleDbCommand(_query, Sqlcon);
cmd.Parameters.AddWithValue("[Item Name]", getitemname);
cmd.Parameters.AddWithValue("[Description]", getdesc);
cmd.Parameters.AddWithValue("[Price]", getprice);
cmd.Parameters.AddWithValue("[Stock]", Convert.ToString(Convert.ToInt32(myStock) - Convert.ToInt32(getquantity)));
cmd.Parameters.AddWithValue("[Item Code]", getitemcode);
var ctr = cmd.ExecuteNonQuery();
Sqlcon.Close();
MessageBox.Show(ctr.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.