【发布时间】: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 条记录。