214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 762
1

Как с DataAdapter'а (который выводит в грид) записать данные в Access

10.12.2013, 16:43. Показов 1317. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день форумчане, есть проблема... я считываю данные с ms sql сервера и вывожу их в грид. при считывании они храняться в DataAdaper. Далее я создаю файл Access'а и создаю в нем таблицу идентичную той что отображается в гриде. Теперь как мне с DataAdapter'а (того который выводит в грид) забросить данные в Access'овский файл ?

Добавлено через 2 часа 6 минут
итак что имею.... tblTest- аксесовская таблица она пустая, tableOsn - DataTable который содержит результат запроса из sql сервера и в нем 63 нужные мне строки. Как писал выше tblTest и клон таблицы из sql сервера.
C#
1
2
3
4
5
6
string queryStringSave = "select * from tblTest"; - аксесовская таблица она пустая
            OleDbDataAdapter adapter = new OleDbDataAdapter(queryStringSave, ExportFile);
            DataTable tblAccess = new DataTable();
            adapter.Fill(tblAccess); - подключился и заполнил DataTable, т.к. таблица аксес пустая в адаптере 0 строк.
            tblAccess = tableOsn.Copy(); - скопировал данные из старой таблицы, теперь в ней нужные мне 63 строки
            adapter.Update(tblAccess);
результат - ничего. ни ошибок нет ни результата нет. вроде принцип такой же как если бы я в гриде отобразил данные внес изминения и вызвал update. где я ошибся ?

Добавлено через 1 час 26 минут
можно так...
C#
1
2
3
4
5
6
7
for (int i = 0; i < tableOsn.Rows.Count; i++)
                {
                    string queryStringSave = "insert into tblTest(kodlg,kodlgopr,Name) values ('" + tableOsn.Rows[i]["kodlg"] + "','" + tableOsn.Rows[i]["kodlgopr"].ToString() + "','" + tableOsn.Rows[i]["name"].ToString() + "')";
                    OleDbDataAdapter adapter = new OleDbDataAdapter(queryStringSave, ExportFile);
                    DataTable tblAccess = new DataTable();
                    adapter.Fill(tblAccess);
                }
работает конечно, но это бред полнейший. Гов..код вообщем. как сделать получше ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2013, 16:43
Ответы с готовыми решениями:

Как записать данные в таблицу Access
Доброго времени суток уважаемые, мне нужна ваша помощь. Имеется БД, суть в том что мне надо через...

Как из textBox записать данные в таблицу ms access?
мне надо запихнуть в таблицу ФИО, должность и т.д. из textBox-ов. Хотел в dataGridView присвоить, а...

Как записать в переменную данные ячейки БД Access?
Доброго времени суток! Скажите пожалуйста, как переменной присвоить данные поля pol1 , tab1 из...

Как достать данные из выборки БД Access и записать на лист Excel
Уважаемые форумчане есть вот такая проблема: Через VBA c екселя запускаю запрос на выборку в...

4
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.12.2013, 20:31 2
Цитата Сообщение от wm_leviathan Посмотреть сообщение
где я ошибся ?
Статус строк тоже копируется. У всех строк будет статус "не изменена". А раз ни чего не изменено, то и Update ни одной строки не обработает.
Цитата Сообщение от wm_leviathan Посмотреть сообщение
но это бред полнейший
Конечно, бред. Адаптер создается на базе команды выборки, а не на базе команды вставки. Но ход мыслей правильный. Нужно для каждой строки основной таблицы создать команду вставки, задать ее параметры и выполнить.
1
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 762
11.12.2013, 12:40  [ТС] 3
если для каждой строки то по сути без цикла нельзя ? а если их 20 тыс. например то 20 тыс. раз инсертить их ? у MS SQL сервера 2000 есть импорт эксопрт таблиц, эх если бы MS поделился бы им ))
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
11.12.2013, 12:46 4
wm_leviathan, не такой уж и жадный этот Microsoft.
Цитата Сообщение от wm_leviathan Посмотреть сообщение
если для каждой строки то по сути без цикла нельзя ?
Если бы вам удалось реализовать свой первый вариант, у вас бы один фиг данные заносились в цикле. Просто этот цикл был бы писан не вами, на ходился внутри Update. Плюс Некоторые не нужные операции, типа Copy. То есть, написание своего цикла вышло бы эффективнее.
С BULK INSERT'ом я не работал, поэтому разбирайтесь с ним сами, либо ждите ответ более компетентных в этой теме форумчан.
1
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 762
11.12.2013, 16:17  [ТС] 5
Спасибо за идею, почитал про BULK'у я так понял она дергает только из файла и загружает в таблицу, а при экспорте надо использовать программу bcp
В следующем примере для выполнения массового экспорта XML-данных из таблицы, созданной в предыдущем примере при помощи того же XML-файла форматирования, используется программа bcp.
что делает мне дополнительные костыли.

подумал над вашими словами
Но ход мыслей правильный. Нужно для каждой строки основной таблицы создать команду вставки, задать ее параметры и выполнить.
. Необходимо сделать импорт из SQL сервера и экспорт в таблицу Access
и сделал так (может на будущее кому и пригодится):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
DataTable dtImport = new DataTable();
            SqlConnection connImport = new SqlConnection();
            connImport.ConnectionString = "Persist Security Info=False;User ID=sa; Password=749563; Initial Catalog=Esrn; Data Source=192.168.0.10\\ESRN2"; //подключаемся к серверу
            string ConnStringExport = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Jet OLEDB:Engine Type=5";
            string strSelect = "select kodlg, kodlgopr, Name from sprLg";
            string strInsert = "INSERT INTO 358001 (kodlg, kodlgopr, Name) VALUES (@kodlg, @kodlgopr, @Name)";
 
            try
            {
                SqlDataAdapter daImport = new SqlDataAdapter(strSelect, connImport);
                connImport.Open();
                daImport.Fill(dtImport); //заполняем DataTable таблицей, вытянутой из сервера
                connImport.Close();
 
                DataTable dtExport = new DataTable();
                OleDbConnection connExport = new OleDbConnection(ConnStringExport);
                strSelect = "select kodlg, kodlgopr, Name from 358001"; //эта строка не нужна есть у вас таблица из SQL сервера имеет такое же название как и таблица в Access'е (у меня названия разные)
                OleDbDataAdapter daExport = new OleDbDataAdapter(strSelect, connExport); //подключаемся к access базе
                daExport.InsertCommand = new OleDbCommand(strInsert);
                daExport.InsertCommand.Parameters.Add("@Kodlg", OleDbType.Integer, 2, "Kodlg");
                daExport.InsertCommand.Parameters.Add("@Kodlgopr", OleDbType.Integer, 2, "Kodlgopr");
                daExport.InsertCommand.Parameters.Add("@Name", OleDbType.VarChar, 255, "Name");
                daExport.InsertCommand.Connection = connExport;
                daExport.InsertCommand.Connection.Open();
                daExport.Fill(dtExport);
 
                for (int i = 0; i < dtImport.Rows.Count; i++) //как не крутись а без циклов не обойтись
                {
                    DataRow custRow = dtExport.NewRow();
                    custRow["Kodlg"] = dtImport.Rows[i]["Kodlg"];
                    custRow["Kodlgopr"] = dtImport.Rows[i]["Kodlgopr"];
                    custRow["Name"] = dtImport.Rows[i]["Name"];
                    dtExport.Rows.Add(custRow);
                }
 
                daExport.Update(dtExport);
                daExport.InsertCommand.Connection.Close();
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
вообщем Kodv спасибо за мысль, работает конечно на порядок быстрее чем первый раз.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2013, 16:17
Помогаю со студенческими работами здесь

DBGrid, который выводит информацию из файла MS Access
Здравствуйте пользователи! Прошу Вас помочь) Имею DBGrid, который выводит информацию из файла MS...

Как передавать изменения в БД (редактирую данные через грид)?
Всем привет! вот так конекчусь к базе public partial class main_f : Form { ...

Скрипт, который запрашивает дату рождения и выводит на страницу данные
Здравствуйте. Задание №2: Создать HTML-страницу, которая при загрузке запрашивает дату вашего...

Создать макрос, который данные в выделенной области выводит красным цветом на светло-голубом фоне
помогите пожалуйста создать макрос, который данные в выделенной области выводит красным цветом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru