簡體   English   中英

C#無法更新msaccess數據庫中的記錄

[英]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 ”。

OleDbCommand.Parameters屬性

當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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM