Перенос данных из SQL в Access с использованием C # - PullRequest
1 голос
/ 05 мая 2011

Для моего текущего проекта в c # мне нужно перенести данные из базы данных SQL в базу данных доступа. Сейчас я загружаю данные в DataSet с помощью SqlDataAdapter. После этого я перебираю записи и вставляю их в Access-DB, используя OleDb:

// Load data from SQL
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter("select goes here", sqlConnection);
adapter.Fill(ds);

// Prepare the Insert Command
oleDBCommand = "Insert into...";
oleDBCommand.Parameters.Add(new OleDbParameter(...));

// Insert every row from the DataSet
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
    // Update Parameters and Execute
    oleDBCommand.Parameters[0].Value = ds.Tables[0].Rows[i].ItemArray[0];
    oleDBCommand.ExecuteNonQuery();
}

Этот подход работает отлично, однако он кажется неуклюжим и медленным. Поэтому мне было интересно, есть ли другой лучший способ передачи данных из одной БД в другую.

Ответы [ 2 ]

1 голос
/ 05 мая 2011
  1. Использовать SqlDataReader: SqlDataReader работает быстрее, чем SqlDataAdapter
  2. Использовать транзакцию: используйте транзакцию и свяжите каждую команду с этой транзакцией. после завершения команд вставки совершите транзакцию, которая может выполняться быстрее.
0 голосов
/ 11 мая 2011

Другая идея:
Если это всегда одна и та же база данных Access и вы всегда импортируете свои данные из одной и той же таблицы, вы можете связать таблицы SQL Server в Access один раз.

Если таблица SQL Server связана, вы можете использовать ее в MDB точно так же, как локальную таблицу.
Затем вы можете просто вставить непосредственно из связанной таблицы в локальную таблицу, выполнив этот запрос черезOleDB в базе данных Access:

insert into LocalAccessTable (Column1, Column2)
select Column1, Column2
from LinkedSqlServerTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...