无法向MS Access表中添加DataTable

本文关键字:添加 DataTable Access MS | 更新日期: 2023-09-27 18:16:12

我有一个数据表,大约6000行从查询创建到SQL Server DB。现在我尝试将数据添加到MS-Access表中。一切似乎都很顺利。不会引发异常,但不会添加任何数据。下面是我使用的代码:

DataTable t = new DataTable();
// fill data table

// Create DB - works!
var Name = DateTime.Now.ToString("H_mm_ss");
string strAccessConnectionString = @"Provider = Microsoft.Jet.OLEDB.4.0;" +
                                    @"Data Source=" + "C:''chhenning''" + Name + ".mdb;";
ADOX.CatalogClass Catalog = new ADOX.CatalogClass();
Catalog.Create(strAccessConnectionString);
OleDbConnection accessConnection = new OleDbConnection(strAccessConnectionString);
accessConnection.Open();
// Create Table - works!
OleDbCommand Command = accessConnection.CreateCommand();
Command.CommandText = "Create Table Test( "
    + " ID_ int not null "
    + " , Year_ int not null "
    + " , Value_ float not null )";
Command.ExecuteNonQuery();
// Add data into table - does not work!
var adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand("select * from Test", accessConnection);
var cbr = new OleDbCommandBuilder(adapter);
cbr.GetInsertCommand();
var Rows = adapter.Update(t);

我已经确保我的数据表中有数据,并且数据表和MS-Access都具有相同的数据类型的相同列。

有人能指出代码的错误吗?我应该采取哪些步骤来进一步调查这个问题?

无法向MS Access表中添加DataTable

adapter.Update(table)方法查看DataTable中行的RowState。
如果行具有RowState == DataRowState.Unchanged,则该方法将不执行任何更新。

我假设您从SqlServer数据库加载数据表而不做任何更改,因此每一行的RowState都是Unchanged。尝试在行上循环并调用

foreach(DataRow r in t.Rows)
    r.SetAdded();

这将强制每列上的RowState为Added,然后DataAdapter上的InsertCommand将执行insert