2016-07-31 155 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