[英]Microsoft Access Database, Insert, Update and Delete in Visual Studio with C#
[英]INSERT INTO c# to Microsoft access
我正在嘗試將某些文本框中的文本插入到我可以訪問的數據庫中。 該代碼不會產生任何錯誤,但似乎不會將項目添加到數據庫中。
數據庫稱為“數據庫”,表稱為“ TotalPlayerName”,字段稱為“玩家名稱”。 表格中還有其他字段。
for(int i = 0; i < numberOfPlayers; i++){
using (OleDbConnection connection = new OleDbConnection(@"CONNECTION STRING"){
using (OleDbCommand command = new OleDbCommand(@"INSERT INTO TotalPlayerName ([Player Name]) VALUES(@p1)", connection)){
connection.Open();
command.Parameters.Add("@p1", OleDbType.VarWChar).Value = Convert.ToString(textBox[i].Text);
command.ExecuteNonQuery();
}
}
}
您可能只需要聲明@ p1,因為您在INSERT語句中對其進行了調用,但從未將其定義為變量,例如:varchar,int,ect,ect。 這可能適用於您嘗試執行的操作:
using (OleDbCommand command = new OleDbCommand(@"DECLARE @p1 VARCHAR(50) INSERT INTO TotalPlayerName ([Player Name]) VALUES(@p1)", connection)){
另外,如果可以的話,我絕對會使其成為存儲過程。 這適用於SQL,不確定是否可以與MS Access一起使用,但是我可以想象。 您可能要做的另一件事是,確保找到正確的數據庫。
Database.dbo.TotalPlayerName
但這可能不是問題,可能僅僅是缺少變量聲明。
雖然我看不到代碼有什么特別的問題,但我可以告訴您您的方法有點不對勁。 具體來說,對於循環的每次迭代,您都是:
如果您一次執行步驟1和步驟2的一部分,然后在循環中執行如下語句,那將是更好的選擇:
using (OleDbConnection conn = new OleDbConnection(
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\foo.accdb"))
{
conn.Open();
OleDbCommand command = new OleDbCommand(
@"INSERT INTO TotalPlayerName ([Player Name]) VALUES (@p1)", conn);
command.Parameters.Add(new OleDbParameter("@p1", OleDbType.VarChar));
for (int i = 0; i < numberOfPlayers; i++)
{
command.Parameters[0].Value = textbox[i].Text;
try
{
command.ExecuteNonQuery();
}
catch (Exception ex)
{
// do something
}
}
conn.Close();
}
我假設textbox
是實際文本框控件的數組或列表。 如果真是這樣,那么textbox[i].Text
已經是一個字符串,並且您不需要做任何特殊的事情即可使OLE識別出它。
最后一點-添加try / catch並在其中放置一個斷點。 您確定它沒有失敗嗎? 如果您在調試模式下運行,則無法保證您的程序將停止運行-它可能會返回到表單而不會報告任何錯誤。 直到嘗試部署應用程序時,您才可能看到實際的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.