2012-03-24 7 views
1

Во-первых, для тех, кто хотел бы спросить ПОЧЕМУ на земле, я ДОЛЖЕН ПРОДОЛЖИТЬ от SQL SERVER до ACCESS, позвольте мне рассказать вам сценарий. Есть несколько ПК с очень низкой конфигурацией (256 МБ ОЗУ, 2 ГГц процессор) Я не могу установить SQL Server. Поэтому я хочу, чтобы основные операции выполнялись на SQL-сервере, а некоторые операции поиска и аудита данных выполнялись на медленной машине.Скопируйте таблицу с SQL Server 2008 на MS Access 2007

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

1) Подключение к SQL Server, заполнить DataTable объект путем чтения таблицы из SQL Server.

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 Bulk не может использоваться для копирования с SQL Server на Access.

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

+1

http://www.codeproject.com/Articles/21466/Very-Fast-Table-Copy-from-an-ODBC-Source-into-Micr –

+2

Пожалуйста, не прикрепите свои заголовки к «C#» и таким образом , Для этого нужны теги. –

+0

Просто, чтобы убедиться, что вы знаете о них, есть некоторые варианты, начиная с «полного SQL Server», который стоит рассмотреть: SQL Compact 4.0 (или 3.5) работает в proc @ http://www.microsoft.com/download /en/details.aspx?id=17876; SQL-2012 «LocalDB» работает как отдельный процесс, но более легкий вес, чем «полный» SQL-сервер базы данных @ http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a- лучше-sql-express.aspx; и, конечно же, «регулярный» выпуск SQL Server Express –

ответ

2

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

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

Если вы хотите начать с помощью .NET затем создать пакет SSIS и вызвать его из .NET

For details

+2

Пожалуйста, говорите по-английски. «u» не является английским словом. –

1

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

oDA.Update(donationdetails); 

Итак, несмотря на то, что у вас есть все данные в DataTable, у вас нет цели для ее копирования.

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

0

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

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

oDA.Update(ds); 
+1

Уместно помещать сегменты кода в «блоки кода»! – ChiefTwoPencils

1

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

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