无法将DataTable添加到MS Access表中

时间:2013-05-31 14:53:12

标签: c# ms-access ado

我有一个DataTable,从查询到SQL Server DB创建了大约6000行。现在我尝试将数据添加到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);

我确保我的DataTable中包含数据,并且DataTable和MS-Access具有相同的列,具有相同的数据类型。

有人能发现代码有什么问题吗?我采取了哪些措施来进一步调查问题?

1 个答案:

答案 0 :(得分:3)

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

我认为您从SqlServer数据库加载数据表而不进行任何更改,因此每行的RowState都是Unchanged。尝试循环行并调用

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

这将强制每列上的RowState添加,然后DataAdapter上的InsertCommand将执行插入