2012-02-22 173 views
1

我需要每天一次将数据从MS Access数据库导入SQl Server 2000数据库。由于我需要这个每天都要完成的自动化是否有一个C#例程能够做到这一点?C#将MS-Access数据库导入到SQL Server中?

MS Access数据库中的表将被命名为SQL Server中的相同表,并且它需要删除SQL Server数据库中的表,然后从MS Access中导入新的数据/表。

+2

听起来像[SQL Server集成服务]的工作(http://msdn.microsoft.com/en-us/library/ms141026.aspx) – 2012-02-22 10:18:50

+0

没有我知道的自动进程(在C#中)。这些表格会变大吗?这可能会影响解决方案的选择。 – dice 2012-02-22 10:19:36

+0

是的,其中一些将是 – Beginner 2012-02-22 10:23:29

回答

0

三个步骤:

1 - 创建SQLServer的一个LinkedServer这样的:
EXEC master.dbo.sp_addlinkedserver @server = 'Customers', @srvproduct = 'CustomersDB', @provider = 'Microsoft.Jet.OLEDB.4.0', @datasrc = 'C:\inetpub\wwwroot\ftp\AccessDB.MDB', @location = '', @provstr = '', @catalog = ''
EXEC master.dbo.sp_serveroption @server = 'Customers', @optname = 'collation compatible', @optvalue = 'false'

2 - 创建目标SQLSERVER内的存储过程执行导入工作
CREATE PROCEDURE ImportMDBData
as
TRUNCATE TABLE sqlServerCustTable
INSERT INTO sqlServerCustTable (list your columns name here) (SELECT * FROM Customers.dbo.mdbCustTable)

3 - 现在,你只需要在代码中调用存储过程

+0

对不起,我从来没有创建过存储过程,在上面我要用什么来替换?我的两个数据库目前被称为accessDB和sqlDB .. accessDB是在C:\ inetpub \ wwwroot \ ftp – Beginner 2012-02-22 10:59:32

+0

也我需要每个表的存储过程呢?我有11个表 – Beginner 2012-02-22 11:00:44

+0

好吧,你应该用你的sqlserver表的列名替换(在这里列出你的列名)。不,你不需要每个表的存储过程,只需重复TRUNCATE和SELECT INTO语句将相关表的名称更改为相同的存储过程 – Steve 2012-02-22 11:04:12

1

一个选项是在你的SQL Server数据库,这样做是为了创建一个存储过程,在这里看到: select from access database file and insert to sql Database

正如由marc_s提到您可以使用SSIS - 但也可能有相当多的学习涉及获得该权利。

另一个选择是从C#内部控制它 - 从访问数据库中提取数据,然后将其插入到sql服务器 - 这不太可能是你想要的。

如果你的Access数据库和SQL Server实例都保证在同一台服务器上的话,我会倾向于如果没有,那么它开辟了几十个其他问题尝试选择1;)

编辑: 你提到它可以通过点击一个按钮来完成 - 在这种情况下,你应该至少给SSIS解决方案一次,看看它是否看起来像你想要的,它是专门为这种类型的场景而设计的。

0

access.mdb链接服务器的SQL Server版本的任何,应该需要Microsoft.ACE.OLEDB.12.0或Microsoft.Jet .OLEDB.4.0。这些驱动程序存在两种类型的32位和64位。 64位的操作系统喜欢安装64位喷射驱动器,其他明智的连接不可能工作。

相关问题