Скопировать таблицу из SQL Server 2008 в MS Access 2007 - PullRequest
1 голос
/ 24 марта 2012

Во-первых, для тех, кто хотел бы спросить, ПОЧЕМУ, черт возьми, я СУЩЕСТВУЮ с SQL-сервера до ДОСТУПА, позвольте мне рассказать вам сценарий. Есть некоторые ПК с очень низкой конфигурацией (256 МБ ОЗУ, процессор 2 ГГц). Я не могу установить SQL Server. Поэтому я хочу, чтобы основные операции выполнялись на сервере SQL, а некоторые операции по сбору и проверке данных выполнялись на более медленной машине.

Итак, поехали: Я хочу скопировать таблицу из SQL Server в MS Access 2007. Я попытался:

1) Подключитесь к серверу sql, заполните объект с данными, прочитав таблицу с сервера sql.

2) Создайте соединение с MS Access и используйте метод Dataadapter.Update для обновления таблицы в базе данных MS Access.

Однако 2-й шаг не работает, хотя и не выдает никакой ошибки. Вот мой код:

SqlConnection cnn = new SqlConnection(@"initial catalog=DBTempleERM;user id=aditya;password=Aditya_ravi$;Data Source=adityalappy\sqlexpress");
SqlCommand cmd = new SqlCommand("SELECT * FROM donationdetails", cnn);
cnn.Open();
System.Data.SqlClient.SqlDataAdapter sDA = new SqlDataAdapter(cmd);
DataTable donationdetails = new DataTable();
sDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
sDA.Fill(donationdetails);

MessageBox.Show(donationdetails.Rows.Count.ToString());

OleDbConnection oleConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:Database Password=Aditya_ravi$;Data Source=C:\dbt.accdb");
oleConn.Open();
OleDbCommand oleComm = new OleDbCommand();
OleDbDataAdapter oDA = new OleDbDataAdapter(oleComm);
OleDbCommandBuilder oCb = new OleDbCommandBuilder(oDA);
oDA.Update(donationdetails);

В конце выполнения не выдается никакой ошибки, но я не вижу записей, скопированных с SQL Server в MS Access.

Я узнал, что массовое копирование SQL нельзя использовать для копирования с SQL Server в Access.

Я также хочу добавить первичный ключ из таблицы SQL Server в таблицу MS Access.

Ответы [ 4 ]

2 голосов
/ 24 марта 2012

Почему вы не используете SSIS, чтобы сделать это для вас.

Вы можете создать пакет SSIS для копирования таблицы sql в MS access.

Если вы хотите инициировать с помощью .NET, тогдасоздать пакет служб SSIS и вызвать его из .NET

Подробнее

1 голос
/ 08 декабря 2016

Древний вопрос, но я держу пари, что RowState всех ваших строк в пожертвования были неизменными, поэтому DataAdapter рассматривает их как «Мне не нужно ничего делать с этой строкой».

1 голос
/ 24 марта 2012

На данный момент oDA не подключено ни к одной таблице на стороне доступа:

oDA.Update(donationdetails);

Таким образом, даже если у вас есть все данные в DataTable, у вас нет цели для их копирования.

Я не думаю, что это лучший подход, но в этом суть того, почему ваш код не работает как есть.

0 голосов
/ 28 января 2013

Вы можете использовать объект набора данных вместо datatable.

DataSet ds=new DataSet();
sDA.Fill(ds,tablename);

oDA.Update(ds);
...