【问题标题】:Best Approch for bulk insert to Acces database in c#在 c# 中批量插入 Access 数据库的最佳方法
【发布时间】:2012-08-09 09:42:44
【问题描述】:

我正在开发 Windows 应用程序,它使用 Microsoft 访问作为数据库和 oldedb 数据提供程序。 在这个项目中,我曾经导入 xml 文件并将数据写入数据库。 我想做批量插入而不是一次插入一条记录。 所以我尝试使用 DAO 方法,但有时会出现异常,例如

“当前锁定无法更新”

这是我使用的代码。

using TEST = Microsoft.Office.Interop.Access.Dao;

Pubic void Insert()
{

        string sBaseDirectory = (AppDomain.CurrentDomain.BaseDirectory).ToString();
            string sODBPath = sBaseDirectory + @"\TEST.accdb";
            TEST.DBEngine dbEngine = new TESt.DBEngine();
            TEST.Database db = dbEngine.OpenDatabase(sODBPath);
            TEST.Recordset rsTest = db.OpenRecordset("dtTest");
        for(int i=0;i<1000;i++)
                {
                    rsTest.AddNew();
                    rsTest.Fields["ID"].Value =i;
                    rsTest.Fields["Name"].Value ="Test";
                    rsTest.update();

                 }
        rsTest.close();
        db.close();

}

使用 Oldedb:

    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    string TableSQl = "Select * from dtTest where ID=0";
    OleDbDataAdapter dataAdapter=new OleDbDataAdapter(TableSQl,ConnectionString);
    dataAdapter.InsertCommand = new OleDbCommand(INSERT);
    OleDbConnection OleConn = new OleDbConnection(ConnectionString);

       for(int i=0;i<1000;i++)
        {
          dataAdapter.InsertCommand.Parameters.Add("ID", OleDbType.BigInt, 8,i.ToString());
          dataAdapter.InsertCommand.Parameters.Add("Name", OleDbType.BigInt, 8, "test");              
    }

    dataAdapter.InsertCommand.Connection = OleConn;
    dataAdapter.InsertCommand.Connection.Open();  
    dataAdapter.update(dt);        
    dataAdapter.InsertCommand.Connection.Close();

这里它没有在表中插入记录。

请指导这段代码的问题以及好的方法。

【问题讨论】:

  • 在第二个示例中,您添加了 1000 个名为“Id”的参数和 1000 个名为“Name”的参数。您不应该只添加一次参数,然后将记录插入数据表吗?
  • 这只是一个例子。最终我的意图是如何一次插入 1000 条记录。

标签: c# winforms ms-access


【解决方案1】:

参见http://msdn.microsoft.com/en-us/library/bbw6zyha(v=vs.80).aspx - '将参数与 DataAdapter 一起使用'

Parameters 集合的 Add 方法采用 参数、DataAdapter 特定类型、大小(如果适用于 类型),以及数据表中 SourceColumn 的名称

所以你需要正确创建参数,填充DataTable,然后调用Update。

是否有任何文档表明这种方法将批量插入而不是一次插入一个?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多