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

Как правильно сделать update с посредством dataadapter

09.01.2014, 23:31. Просмотров 3976. Ответов 4
Метки нет (Все метки)

Всем привет!
Возник вопрос. Есть в бд табличка

CountryId - int (ключ + индексируемый столбец)
CountryName - nchar(25) (уникальное название)

Есть , которая заполнялась следующим способом:
C#
1
2
3
4
5
6
7
countriesSqlCommand.Connection = commonElements.myConnection;
countriesSqlCommand.CommandText = commonElements.countriesString;
countriesSqlDataAdapter.SelectCommand = countriesSqlCommand;
countriesDataSet.Reset();
countriesSqlDataAdapter.Fill(countriesDataSet);
countriesBindingSource.DataSource = countriesDataSet.Tables[0];
countriesDataGridView.DataSource = countriesBindingSource;
Необходимо обновить табличку в БД изменёнными данными из countriesDataGridView.

Вот код события:
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
//нажатие кнопки сохранить
        private void bSave_Click(object sender, EventArgs e)
        {
                    //изменение текста команды
            countriesSqlCommand.CommandText = "UPDATE Countries SET CountryId = @CountryId, CountryName = @CountryName";
 
            //добавление параметров к команде
            countriesSqlCommand.Parameters.Add("@CountryId", SqlDbType.NChar, 5, "CountryId");
            countriesSqlCommand.Parameters.Add("@CountryName", SqlDbType.NChar, 25, "CountryName");
            
            //изменение команды Update в countriesSqlDataAdapter
            countriesSqlDataAdapter.UpdateCommand = countriesSqlCommand;
 
            try
            {
                commonElements.myConnection.Open();
                countriesSqlDataAdapter.Update(countriesDataSet.Tables[0]);
                MessageBox.Show("Данные oбновлены!");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Ошибка обновления!\n" + ex);
            }
            commonElements.myConnection.Close();
        }
Конечно ничего не работает. Как написать так, чтобы БД обновлялась? Буду очень благодарен помощи в виде кода с краткими пояснениями.

И вот ещё вопрос. Id нужно самостоятельно вводить или БД уже сама, автоматически присвоит при обновлении добавленных записей?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2014, 23:31
Ответы с готовыми решениями:

Пакетная передача обновлений (Insert) в базу данных посредством DataAdapter.Update
Здравствуйте, господа :yes: Кто-нибудь имел дело с пакетной передачей обновлений (а конкретно...

Как вы делаете Update данных в БД (при использовании DataGridView, DataSet, DataAdapter)
Доброго дня, форумчане. Отдельный привет знакомым форумчанам. Решил поднять я старую наболевшую...

проблема с DataAdapter.Update
вывожу при загрузке формы в datagrid табличку : Dim oCommand As New...

Не выполняется DataAdapter.Update
делаю так private void Form1_Load(object sender, EventArgs e) { ...

Обновление базы данных dataadapter.Update
знаю что таких тем было много но ни на одной из них я не нашел ответа на свой вопрос ...

4
Водяной Змей
Заблокирован
09.01.2014, 23:53 2
Обычно проще использовать OleDbCommandBuilder, чем писать UPDATE-, INSERT- и DELETE-запросы самому.
Вот пример. База в комплекте.

Но учтите, что в таблице должно быть поле-счётчик и желательно, чтобы оно было ключевым. Когда все поля имеют числового типа, оно обязательно должно быть ключевым.
1
Вложения
Тип файла: zip Редактируемая БД Access.zip (49.4 Кб, 312 просмотров)
eaglecrazy
1 / 1 / 0
Регистрация: 06.02.2012
Сообщений: 31
10.01.2014, 00:03  [ТС] 3
Спасибо! Насколько я понял commandbuilder только для работы с одной таблицей. Мне необходимо разобраться с вопросом глубже, т.к. у меня в курсаче 6 таблиц и некоторые будут обновляться вместе. Будем разбираться дальше.
0
Водяной Змей
Заблокирован
10.01.2014, 08:13 4
Насколько я понял commandbuilder только для работы с одной таблицей.
Нет, с любым количеством таблиц может работать.
0
kodv
1430 / 1103 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
10.01.2014, 10:49 5
Цитата Сообщение от eaglecrazy Посмотреть сообщение
Id нужно самостоятельно вводить или БД уже сама, автоматически присвоит при обновлении добавленных записей?
Что имеется в виду под обновлением записей? По идее, обновление - это изменение. Логически, Id - это поле, которое позволяет уникально идентифицировать запись в любой момент времени. То есть, при обновлении записи Id меняться не должен, он должен задаваться при добавлении новой записи (автоматически или вручную).
Цитата Сообщение от eaglecrazy Посмотреть сообщение
Конечно ничего не работает
Следовало бы писать, как именно не работает. Нет эффекта? Или выбивает ошибку? По идее, должно ругаться на попытку установить одинаковый ключ у нескольких записей ...
Цитата Сообщение от eaglecrazy Посмотреть сообщение
Как написать так, чтобы БД обновлялась?
T-SQL
1
2
3
UPDATE Countries
    SET CountryName = @CountryName
    WHERE CountryId = @CountryId
Но это только в том случае, если вы правильно используете термин обновление. На его неправильное использование натолкнула ваша фраза (пояснения выше):
Цитата Сообщение от eaglecrazy Посмотреть сообщение
d нужно самостоятельно вводить или БД уже сама, автоматически присвоит при обновлении добавленных записей?
PS: Не слушайте змея искусителя. Учитесь составлять запросы самостоятельно. Пользы от этого будет определенно больше. Сможете как гибко писать команды для работы с DataAdapter'ом, так и, при необходимости, работать напрямую с БД. Да и не будет глупых вопросов, которые возникают зачастую на этом форуме при невозможности создать команду через CommandBuilder.
0
10.01.2014, 10:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 10:49

Волнует скорость DataSet и DataAdapter.Update
При использовании метода Update в базу данных вносятся изменения со всего DataSet'а или система...

DataAdapter.Update() - достать файлы из базы в Excel, поправить некоторые строки, положить все обратно
Задача, достать файлы из базы в эксель, поправить некоторые строки, положить все обратно, база...

Не получается сделать Update (Update requires a valid InsertCommand)
Не получается сделать Update выдаёт ошибку, что делаю не так? В таблице только одно поле, оно...


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

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

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