2016-07-31 141 views
0

我需要从中获取数据的遗留应用程序使用非常旧的Access数据库(97)。供应商提供的示例代码是VB6。 :插入恼火的外观:查询更新到SQL Server的MS Access

我的新应用程序已经有一个SQL Server数据库,其模式很大程度上对应于Access数据库。因此,我想在我的应用程序中执行的第一件事是读取访问数据库并将其转储到SQL Server。本质上,我想复制4或5个表格。

你会认为会有一个容易遵循的例子来跟踪这类事情,但我的谷歌福正在失败,我试图找到一个。我需要以编程方式执行此操作,而不是通过升级实用程序。

+0

SSIS?否则:请找到一个解释和[代码转储数据从访问SQL Server链接表](http://stackoverflow.com/questions/37412499/ms-access-application-work-offline/37416358#37416358)。 – marlan

回答

0

当你标记您的问题.NET,我想用C#代码

下面的类是ImportHelper从来源,进口的目标。

定义的ConnectionString源和目标

class ImportHelper 
{ 

    //modify connectionstring as needed 
    public string SourceConnectionString { get; set; } 
    public string DestinationConnectionString { get; set; } 

    public ImportHelper(string sourceConnectionString, string destinationConnectionString) 
    { 
     SourceConnectionString = sourceConnectionString; 
     DestinationConnectionString = destinationConnectionString; 
    } 
    public void Import(string sourceTable, string targetTable = null) 
    { 
     using (var sourceConnection = new OleDbConnection(SourceConnectionString)) 
     { 
      if (string.IsNullOrEmpty(targetTable)) targetTable = sourceTable; 
      sourceConnection.Open(); 

      // Perform an initial count on the destination table. 
      var commandRowCount = new OleDbCommand("SELECT COUNT(*) FROM " + sourceTable, sourceConnection); 
      long countStart = Convert.ToInt32(commandRowCount.ExecuteScalar()); 
      Console.WriteLine("Source Table [{0}] has {1} rows", sourceTable, countStart); 

      // Get data from the source table 
      var commandSourceData = new OleDbCommand("SELECT * FROM " + sourceTable, sourceConnection); 
      var reader = commandSourceData.ExecuteReader(); 

      //--------------- 
      using (SqlConnection destinationConnection = new SqlConnection(DestinationConnectionString)) 
      { 
       destinationConnection.Open(); 

       using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection)) 
       { 
        bulkCopy.DestinationTableName = targetTable; 

        try 
        { 
         // Write from the source to the destination. 
         bulkCopy.WriteToServer(reader); 
         Console.WriteLine("Sucess Importing " + sourceTable); 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex.Message); 
        } 
        finally 
        { 
         reader.Close(); 
        } 
       }//using 
      }//using 
     }//using 
    } 
} 

如何使用:

//modify connectionstring as needed 
    //Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=; //access 97..2000 
    string SourceConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\database1.accdb;Persist Security Info=False;"; 
    string DestinationConnectionString = @"Data Source=xxxx;Initial Catalog=test;user=xxx;password=xxx;"; 
    new ImportHelper(SourceConnectionString, DestinationConnectionString) 
    .Import("table1","test1"); 
0

用户SQL Server的内置数据导入功能,并直接从Access导入数据到SQL Server。

到这里看看:

https://msdn.microsoft.com/en-us/library/ms140052.aspx

有涉及到几个步骤,但我以为你只是做了一次,这是将Access数据到SQL Server的最简单方法。

如果您需要重复执行此操作(即每周一次或按其他重复计划执行),则需要设置SSIS程序包。

+0

我不仅仅这样做了一次。我在应用程序初始化时这样做了,所以如果我可以将它作为一个进程来启动,那么我会很好,但在运行之前我甚至不知道数据库的名称。 – JoeHz