Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
ser_maksim
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 20
1

Добавить в таблицу Базы Данных данные из таблицы DataSet

10.07.2014, 10:20. Просмотров 1429. Ответов 10
Метки нет (Все метки)

Нужна ваш помощь.
Пытаюсь добавить в таблицу базы данных все данные из DataSet.Table[0].
Т.е. в таблицу DataSet.Table[0] я загружаю данные из csv фала. Полученную выборку хочу вставить в конец таблицы БД.
Не удается написать правильный SQL запрос
SQL
1
INSERT INTO [dbo].[Копия_Audit_Trail_41] SELECT * FROM nn
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
               public void updateDbaseFromDataSet(DataSet RE, string conString)
        {
            try
            {
               
                DataTable nn = new DataTable();
                nn = RE.Tables[0].Copy();
 
                SqlConnection conn = new SqlConnection(conString);
             
                conn.Open();
                string sql_select;
                sql_select = "SELECT * from dbo.Копия_Audit_Trail_41"; 
                SqlDataAdapter dadaadapterRE = new SqlDataAdapter(sql_select, conString);
    
 
                // Insert   
 
                 string ctStr = "INSERT INTO [dbo].[Копия_Audit_Trail_41] SELECT * FROM nn"; //[dbo].[Копия_Audit_Trail_41]-таблица в БД 
                SqlCommand command = conn.CreateCommand();
               // command.Parameters.AddWithValue("@TableMM", nn);
                command.CommandText = ctStr;
             
                 command.ExecuteNonQuery();
     
                // Insert                                           
                conn.Close();
            }
   catch (Exception e)
            {
                MessageBox.Show(e.Message, "updateDbaseFromDataSet", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
            }
            
        }
Пробовал через SqlDataAdapter.Update, но опять нужен SqlDataAdapter.InsertCommand ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2014, 10:20
Ответы с готовыми решениями:

Передача данных из таблицы одной dataSet в таблицу другой dataSet
Здравствуйте. У меня возникла ситуация когда необходимо передать данные из...

Добавить данные в таблицу базы данных Microsoft SQL Server Compact 3.5. Объясните пожалуйста, каким образом это делается =)
Здравствуйте. Решил научиться работать с базами данных. Cоздал проект,...

Как загрузить в DataSet все таблицы базы данных?
Не пойму как загрузить данные из всех таблиц в датасет. Во всех примерах при...

Программно добавить таблицу из базы данных в dataGridView
Как это сделать ?

Добавить таблицу в mdb используя DataSet
Хочу добавить таблицу в пустую Test.mdb создаю в датасете таблицу ...

10
IamRain
1347 / 1213 / 375
Регистрация: 02.08.2011
Сообщений: 3,533
10.07.2014, 10:33 2
Цитата Сообщение от ser_maksim Посмотреть сообщение
Пробовал через SqlDataAdapter.Update
DataAdapter.Update вроде требует другой объект (CommandBuilder), которому, насколько помню, нужен только корректный select command. - во всяком случае, я так делал. С DataAdapter.Update все прекрасно обновляется.
0
ser_maksim
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 20
10.07.2014, 10:50  [ТС] 3
Цитата Сообщение от IamRain Посмотреть сообщение
С DataAdapter.Update все прекрасно обновляется.
Пробую через DataAdapter.Update

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
 public void updateDbaseFromDataSet(DataSet RE, string conString)
        {
            try
            {
 
                DataTable nn = new DataTable();
                nn = RE.Tables[0].Copy();
 
                SqlConnection conn = new SqlConnection(conString);
             
                conn.Open();
                string sql_select;
                sql_select = "SELECT * from dbo.Копия_Audit_Trail_41"; 
                SqlDataAdapter dadaadapterRE = new SqlDataAdapter(sql_select, conString);
             
             SqlCommandBuilder cmdBuildM = new SqlCommandBuilder(dadaadapterRE);
              
              dadaadapterRE.InsertCommand = cmdBuildM.GetInsertCommand();    
                dadaadapterRE.Update(RE.Tables[0]);
      
                conn.Close();
 
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "updateDbaseFromDataSet", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
            }
            
        }
Данные в базу данных добавляются только если я добавляю записи через dataGridView. А когда таблица Dataset.Table[0] заполняется через команду DataAdaprer.Fill данные в БД не попадают.
0
IamRain
1347 / 1213 / 375
Регистрация: 02.08.2011
Сообщений: 3,533
10.07.2014, 10:58 4
Цитата Сообщение от ser_maksim Посмотреть сообщение
DataAdaprer.Fill
Метод Fill нужен для загрузки данных из базы на автономный уровень (читай - в таблицу). Update - в обратную сторону. Если хотите обновить БД, нужно вручную заполнять ваш DataTable.
0
ser_maksim
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 20
10.07.2014, 10:58  [ТС] 5
пробовал написать так
C#
1
string ctStr = "INSERT INTO [dbo].[Копия_Audit_Trail_41] SELECT * FROM " + RE.Tables[0] + "";
Выдает ошибку- Недопустимое имя объекта "csv"
0
IamRain
1347 / 1213 / 375
Регистрация: 02.08.2011
Сообщений: 3,533
10.07.2014, 11:04 6
Примерно так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public void updateDbaseFromDataSet(DataSet RE, string conString)
        {
            try
            {
 
                 DataTable toUpdate = RE.Tables[0];                          
                 // добавляете строки в вашу toUpdate таблицу.           
                 //...
                 //
                 //             
                
                SqlDataAdapter dadaadapterRE = new SqlDataAdapter(sql_select, conString);             
                SqlCommandBuilder cmdBuildM = new SqlCommandBuilder(dadaadapterRE);              
                dadaadapterRE.SelectCommand =  // передаете коректную команду
                dadaadapterRE.Update(RE.Tables[0]);      
                 
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "updateDbaseFromDataSet", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
            }            
        }
Почитайте Эндрю Троелсена про С#, там есть глава про ado.net.
0
Smokeshow13
3 / 3 / 2
Регистрация: 05.06.2014
Сообщений: 23
10.07.2014, 11:05 7
открыв список объектов, где отображены формы и компоненты, и т.д, в конце весит иконка вашей базы данных.
и так же там находится ваш датасет. кликните по нему райткликом, посмотрите, там должно быть "копировать всегда", "Не копировать", "Копировать, если новее", посмотрите. может поможет.

по умолчанию там стоит "Не копировать".

а вообще я пытался использовать скл или олеДБ коннекты, но проще было воспользоваться конструктором.
легче ссылаться на поля, легче использовать команды инсёрт,апдейт, делит.
В таком случае редактирование поелй дб(исходника), не влечет проблем с этими командами.
и так же можно делать правку столбцов, используя различные изменения их вида, превращение в комбобатоны, и т.д.
0
IamRain
1347 / 1213 / 375
Регистрация: 02.08.2011
Сообщений: 3,533
10.07.2014, 11:06 8
Заметьте, для dataAdapter-а не нужно явно создавать подключение. Он сам его создает (с указанной перегрузкой конструктора вроде как), сам открывает и сам закрывает.
0
ser_maksim
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 20
10.07.2014, 11:45  [ТС] 9
Сейчас начну изучать DataAdapter.Update, но вот подскажите
C#
1
2
3
4
5
6
                string ctStr = "INSERT INTO [dbo].[Копия_Audit_Trail_41] SELECT * FROM [dbo].[Audit_Trail_10]";
                SqlCommand command = conn.CreateCommand();
               // command.Parameters.AddWithValue("@TableMM", nn);
                command.CommandText = ctStr;
             
                 command.ExecuteNonQuery();
Данная команда вставляет данные из одой таблицы в БД в другую таблицу БД. Мне нужно тоже самое, только одна из таблиц хранится в DataSet.

Неужели невозможно вставить все данные из таблицы в DataSet в таблицу БД через command.ExecuteNonQuery();?
0
IamRain
1347 / 1213 / 375
Регистрация: 02.08.2011
Сообщений: 3,533
10.07.2014, 14:44 10
1.Нужно знать имя таблицы. Если имя таблицы в dataSet совпадает с именем таблицы в бд, то конечно можно.
Но это кривое решение, поскольку сам Dataset не используется.
2. Нормальное решение. Если обе таблицы загружены в dataSet, то просто копируете из одной таблицы датаSeta в другую, в первой удаляете строки, которые скопировали и вызываете dataAdapter.Update(dataSet).

Добавлено через 11 минут
Цитата Сообщение от IamRain Посмотреть сообщение
Если имя таблицы в dataSet совпадает с именем таблицы в бд
Имею ввиду, если имя той таблицы, в которую вставляете вам заранее известно (и ее нет в dataSet-e), а имя таблицы из dataSeta совпадает с именем соответствующей таблицы в базе.

Добавлено через 1 час 17 минут
сбросьте проект и бэкап вашей бд, если нетрудно.
0
ser_maksim
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 20
10.07.2014, 15:20  [ТС] 11
Цитата Сообщение от IamRain Посмотреть сообщение
2. Нормальное решение. Если обе таблицы загружены в dataSet, то просто копируете из одной таблицы датаSeta в другую, в первой удаляете строки, которые скопировали и вызываете dataAdapter.Update(dataSet).
Пробую так сделать

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
   public void updateDbaseFromDataSet(DataSet RE, string conString)
        {
            try
            {             
               SqlConnection conn = new SqlConnection(conString);
                conn.Open();
                string sql_select;
                sql_select = "SELECT * from dbo.Table_WFI_Distr_Audit_Trail"; 
                SqlDataAdapter dadaadapterRE = new SqlDataAdapter(sql_select, conString);
             
              SqlCommandBuilder cmdBuildM = new SqlCommandBuilder(dadaadapterRE);
              
               dadaadapterRE.InsertCommand = cmdBuildM.GetInsertCommand();
       
                 dadaadapterRE.Fill(RE, "Table_WFI_Distr_Audit_Trail");// "Table_WFI_Distr_Audit_Trail"
                RE.Tables["Table_WFI_Distr_Audit_Trail"].Clear();
                RE.Tables["Table_WFI_Distr_Audit_Trail"].Merge(RE.Tables["csv"]);// "csv" - таблица в DataSet от куда хочу скопировать данные в таблицу dataset "Table_WFI_Distr_Audit_Trail".
               
                dadaadapterRE.Update(RE.Tables["Table_WFI_Distr_Audit_Trail"]);
 
                this.dataGridView_preView.DataSource = RE.Tables["Table_WFI_Distr_Audit_Trail"]; // All
 
                conn.Close();
 
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "updateDbaseFromDataSet", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
            }
            
        }
После запуска таблица в БД остается пустой. Если добавлять данные вручную например через dataGridView данные добавляются.
Может быть InsertCommand самому нужно написать,а не через SqlCommandBuilder?

Кстати вариант с одинаковыми именами таблиц тоже ничего не добавил.
0
10.07.2014, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 15:20

Как вывести в gridview данные связующей таблицы реляционной базы данных?
Доброго времени суток. Помогите, пожалуйста, решить задачу. Есть простейшая...

Можно ли загружать данные из таблицы базы данных в класс в виде массива?
Есть данные в базе. Использую Access. Есть таблица Users и класс Users. Как...

Как программно добавить все таблицы из БД в DataSet
Подскажите пожалуйста, как программно добавить все таблицы из БД в DataSet


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru