簡體   English   中英

將C#插入Microsoft Access

[英]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. 創建插入命令,創建參數並分配值
  3. 執行插入

如果您一次執行步驟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.

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