2016-07-31 6 views
0

Унаследованное приложение, в котором мне нужно получить данные, использует очень старую базу данных Access (97). Код примера, который предлагает поставщик, - VB6. : Insert Annoyed Look:Запрос MS Access для обновления в SQL Server

У моего нового приложения уже есть база данных SQL Server со схемой, которая в значительной степени соответствует базе данных Access. Поэтому первое, что я хочу сделать в своем приложении, - это прочитать базу данных доступа и выгрузить SQL Server. По сути, я хочу скопировать более 4 или 5 таблиц.

Вы могли бы подумать, что будет простой пример, чтобы следовать за такими вещами, но мой google-fu не позволяет мне найти его. Мне нужно сделать это программно, а не через утилиту обновления.

+0

SSIS? в противном случае: пожалуйста, найдите объяснение и [код для демпинга данных из Access to 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

Смежные вопросы