将表从 SQL Server 2008 复制到 MS Access 2007

Posted

技术标签:

【中文标题】将表从 SQL Server 2008 复制到 MS Access 2007【英文标题】:Copy table from SQL Server 2008 to MS Access 2007 【发布时间】:2012-03-24 05:31:55 【问题描述】:

首先,对于那些想问我到底为什么要从 SQL SERVER 缩小到 ACCESS 的人,让我告诉你这个场景。 有些 PC 的配置非常低(256 MB RAM,2GHz 处理器)我无法安装 SQL Server。因此,我希望在 SQL 服务器上进行主要操作,并在较慢的机器上完成一些数据检索和审计工作。

所以我们开始: 我想将表从 SQL Server 复制到 MS Access 2007。我试过了:

1)连接到sql server,通过从sql server读取表来填充一个datatable对象。

2) 创建与 MS Access 的连接,并使用 Dataadapter.Update 方法将表更新到 MS Access 数据库。

但是第二步不起作用,尽管它没有抛出任何错误。这是我的代码:

SqlConnection cnn = new SqlConnection(@"initial catalog=DBTempleERM;user id=aditya;password=Aditya_ravi$;Data Source=adityalappy\sqlexpress");
SqlCommand cmd = new SqlCommand("SELECT * FROM donationdetails", cnn);
cnn.Open();
System.Data.SqlClient.SqlDataAdapter sDA = new SqlDataAdapter(cmd);
DataTable donationdetails = new DataTable();
sDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
sDA.Fill(donationdetails);

MessageBox.Show(donationdetails.Rows.Count.ToString());

OleDbConnection oleConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password=Aditya_ravi$;Data Source=C:\dbt.accdb");
oleConn.Open();
OleDbCommand oleComm = new OleDbCommand();
OleDbDataAdapter oDA = new OleDbDataAdapter(oleComm);
OleDbCommandBuilder oCb = new OleDbCommandBuilder(oDA);
oDA.Update(donationdetails);

执行结束时没有抛出错误,但我看不到任何从 SQL Server 复制到 MS Access 的记录。

我了解到 SQL Bulk 复制不能用于从 SQL Server 复制到 Access。

我还想将 SQL Server 表中的主键添加到 MS Access 表中。

【问题讨论】:

codeproject.com/Articles/21466/… 请不要在标题前加上“C#”之类的前缀。这就是标签的用途。 只是为了确保您了解它们,“完整的 SQL Server”有一些选项可能值得考虑:SQL Compact 4.0(或 3.5)在进程内运行 @microsoft.com/download/en/details.aspx?id=17876; SQL 2012 的“LocalDB”作为一个单独的进程运行,但比“完整”SQL 数据库引擎轻量级@blogs.msdn.com/b/sqlexpress/archive/2011/07/12/…;当然,还有“常规”SQL Server Express 版本 【参考方案1】:

你为什么不使用 SSIS 来为你做这件事。

您可以创建一个 SSIS 包将 sql 表复制到 MS 访问。

如果您想通过 .NET 启动,则创建一个 SSIS 包并从 .NET 调用它

For details

【讨论】:

请说英语。 “u”不是英文单词。【参考方案2】:

此时oDA并没有连接到Access端的任何表:

oDA.Update(donationdetails);

因此,即使您拥有 DataTable 中的所有数据,您也没有将其复制到的目标。

我认为这不是最好的方法,但这就是您的代码无法正常工作的核心原因。

【讨论】:

【参考方案3】:

古老的问题,但我打赌您在捐赠详细信息中的所有行的 RowState 都未更改,因此 DataAdapter 将它们视为“我不需要对这一行执行任何操作。”

【讨论】:

【参考方案4】:

您可以使用数据集对象而不是数据表。

DataSet ds=new DataSet();
sDA.Fill(ds,tablename);

oDA.Update(ds);

【讨论】:

以上是关于将表从 SQL Server 2008 复制到 MS Access 2007的主要内容,如果未能解决你的问题,请参考以下文章

使用c#将表从Sql Server导出到PDF文件

如何使用 phpMyAdmin 将表从 SERVER 1 上的数据库复制到 SERVER 2 上的另一个数据库?

将表从一个数据库复制到另一个

如何使用 JDBC 将表值参数(类数组参数)传递给 Microsoft SQL Server 2008 R2 中的存储过程? [复制]

通过 SSIS 创建和复制访问表到 SQL? SQL 2008

从 SQL Server 中的每个表中只复制一条记录