c# - 自动化 mdb 到 sql server

标签 c# entity-framework ms-access dataset

我意识到您可以使用 access 中的升迁向导来正常转换它,但由于这是一个服务器端进程,我们每天从第三方获取 mdb 文件,我必须能够使用非接触式架构。

目前,我准备开始手动编写所有内容(呃),我通过数据源读取 Access 数据库,并通过批量插入或 Entity Framework 将其打入 SQL Server。我真的希望有更好的方法来做到这一点。我愿意接受很多创造性的方法,因为有很多表格和大量数据。

最佳答案

我想到了许多方法,它们确实都涉及自定义编程,但应该相对简单且易于实现。

  1. 从另一个 Access DB,以编程方式(即使用 VBA)打开源数据库。在源数据库中创建到 SQL 后端的链接表。将数据从源数据库复制到链接表(使用insert dest select * from source)。
  2. OPENDATASETOPENROWSOURCE 与 SQL Server 结合使用,直接连接到 Access DB 并复制数据。您可以再次使用 insert dest select * from source 复制数据,或 select * into dest from source 从源数据创建新表。这涉及到调整 SQL Server 上的一些系统设置,因为它默认情况下未启用,但一些 Google 搜索应该可以帮助您入门。
  3. 在 .NET 程序中,使用 SqlBulkCopy(这是用于自动化 bcp 的 .NET 类)从 Access 数据库上传数据。只需直接使用 ADO.Net 处理数据,因为没有理由仅仅为了将数据从一个源迁移到另一个源而构建整个 EF 层。

我在各种项目中使用了上述所有三种方法的变体,但对于移动大量表,我发现选项#2 相对有效。如果您的表名每天都是动态的,那么它将涉及一些动态 SQL 代码,但如果它们是静态的,您只需编写一次逻辑并使用要读取的文件名参数。

关于c# - 自动化 mdb 到 sql server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660249/

相关文章:

c# - 在 WPF 数据网格中查找行的高度

c# - Entity Framework 代码优先要求的外键

ms-access - 如何 Access Access 中选定的行?

sql - 如何在Access VBA中分隔SQL语句

vba - MS Access VBA 函数导致查询加载缓慢

c# - Microsoft Razor Syntax 如何在不向客户端公开的情况下运行服务器端代码?

c# - 检查简单注入(inject)器是否已注册类型

c# - 如何在 NUnit TearDown 中获取测试失败消息

.net - LINQPad 错误 : 'UserQuery' : cannot derive from sealed type 'My.Entity.Framework.CustomDataContext'

c# - 使用 EF6+MVC5 渲染网页时性能不佳。为什么?