INSERT INTO c#到Microsoft访问

时间:2015-12-28 20:27:09

标签: c# database visual-studio ms-access ms-access-2010

我正在尝试将文本插入一些文本框中,并将其插入到我访问过的数据库中。代码不会产生任何错误,但似乎没有将项目添加到数据库中。

数据库称为“数据库”,该表称为“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();

    }

  }

}

2 个答案:

答案 0 :(得分:1)

您可能只需要声明@ 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 :(得分:1)

虽然我没有看到您的代码有什么特别的错误,但我可以告诉您,您的方法有点偏差。具体来说,对于循环的每次迭代,您都是:

  1. 建立与数据库的连接
  2. 创建插入命令,创建参数并指定值
  3. 执行插入
  4. 如果你做了第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并在那里放置一个断点。你确定它没有失败吗?如果您在调试模式下运行,则无法保证程序将停止 - 它可能只返回到表单而不报告任何错误。可能直到您尝试部署应用程序时才会看到发生的实际错误。