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

Обновление базы данных dataadapter.Update

28.06.2009, 14:51. Просмотров 15516. Ответов 8
Метки нет (Все метки)

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

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

C#
1
2
3
4
5
6
scsb = new SqlConnectionStringBuilder();
                scsb.DataSource = @".\SQLEXPRESS";
                scsb.IntegratedSecurity = true;
                scsb.AttachDBFilename = @"C:\Documents and Settings\name\Мои документы\Visual Studio 2008\Projects\Link_base\Link_base\LinkBase.mdf";
                connection = new SqlConnection(scsb.ConnectionString);
                connection.Open();
конструктор класа

C#
1
dataGridView1.DataSource = bindingSource1;

заполнение таблицы dataGridView1 из БД с помощью DataTable

C#
1
2
3
4
5
6
adapter = new SqlDataAdapter(cmd, connection);
                builder = new SqlCommandBuilder(adapter);
                table = new DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                adapter.Fill(table);
                bindingSource1.DataSource = table;
далее самое интересное.... не могу обновить БД

C#
1
2
3
adapter.Update((DataTable)bindingSource1.DataSource);
//или я еще пробовал так
adapter.Update(table);

короче и так и так выпадает ошибка!!

ошибка вот
"Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information."
еще буду признателен если мне обьяснят что такое SqlCommandBuilder(adapter); и что он делает... в мсдн читал но не понял...
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2009, 14:51
Ответы с готовыми решениями:

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

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

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

Обновление данных через DataAdapter и хранимую процедуру
Как обновить дату. У меня есть dataGridView1 в которой таблица Путевка в ней столбцы: НомерПутевки,...

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

8
Green
1919 / 424 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
Завершенные тесты: 2
29.06.2009, 03:09 2
Убрать вторую строку совсем (с SqlCommandBuilder). Этот класс генерирует однотабличные запросы Insert, Update, Delete для указанной команды Select. Ошибка возникает, т.к. в select-запросе нет колонок с первичным ключом, либо уникальных.
1
_nobody_
8 / 8 / 0
Регистрация: 18.04.2009
Сообщений: 115
29.06.2009, 12:12  [ТС] 3
Green,
я убрал строку с SqlCommandBuilder... и появилась вместо старой... новая ошибка..
Update requires a valid UpdateCommand when passed DataRow collection with modified rows.
1
Green
1919 / 424 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
Завершенные тесты: 2
30.06.2009, 02:55 4
Т.к. происходит обновление в таблице, необходимо обновить данные и в БД ( adapter.Update(table) ). Для этого нужно ручками создать sql-запрос на обновление с использованием команды Update (аналогично, если в таблице будут удаляться строки, тогда запрос с Delete, если добавлятся тогда с Insert). Созданные запросы прикрепляются к адаптеру SqlDataAdapter.UpdateCommand, SqlDataAdapter.InsertCommand, SqlDataAdapter.DeleteCommand.
1
_nobody_
8 / 8 / 0
Регистрация: 18.04.2009
Сообщений: 115
30.06.2009, 15:15  [ТС] 5
ну ок... немного разобрался.. но возникла новая ошибка....
я сделал так..

C#
1
2
3
4
5
6
7
8
9
10
11
                adapter.SelectCommand = new SqlCommand("Select Link from " + label1.Text+" where Link=@Link",connection);
                adapter.UpdateCommand = new SqlCommand("Update " + label1.Text + " set Link = @Link Where Link = @oldLink", connection);
                adapter.InsertCommand = new SqlCommand("Insert into " + label1.Text + " Link Values @Link", connection);
                adapter.DeleteCommand = new SqlCommand("delete from " + label1.Text + " where Link=@Link", connection);
 
                adapter.InsertCommand.Parameters.Add("@Link", SqlDbType.Text, 5, "Link");
                adapter.DeleteCommand.Parameters.Add("@Link", SqlDbType.Text, 5, "Link");
                adapter.UpdateCommand.Parameters.Add("@Link", SqlDbType.Text, 5, "Link");
                adapter.UpdateCommand.Parameters.Add("@oldLink", SqlDbType.Text, 5, "Link");
                adapter.Update(table);
                table.AcceptChanges();
ошибка: The data types text and text are incompatible in the equal to operator.
стотбец Линк у меня текстовый....

Добавлено через 15 минут 51 секунду
таак... понял почему выпадала ошибка....
SQL
1
WHERE Link = @oldLink"
эта строка в Апдейт была лишней...
и эта
C#
1
adapter.UpdateCommand.Parameters.Add("@oldLink", SqlDbType.Text, 5, "Link")
но теперь когда я обновляю одну ячейку в Линк то обновляются все чейки... удяляю одну ячейку и удаяются все ячейки... я думал что оно автоматически ищет обновившееся ячейки....
1
Green
1919 / 424 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
Завершенные тесты: 2
01.07.2009, 05:25 6
в "update" должен быть "where". Попробуйте сменить SqlDbType.Text на SqlDbType.VarChar.
1
_nobody_
8 / 8 / 0
Регистрация: 18.04.2009
Сообщений: 115
01.07.2009, 21:40  [ТС] 7
попробовал... ничего....если пишу Where то выпадает та ошибка...
"The data types text and text are incompatible in the equal to operator."
а если не пишу его то бновляет все ячейки ...

Добавлено через 3 часа 0 минут 6 секунд
короче говоря помогите написать Апдейт.... потому как удаление и вставка работаю и сохраняются отлично...
1
Green
1919 / 424 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
Завершенные тесты: 2
02.07.2009, 02:49 8
C#
1
2
3
4
5
6
7
8
9
10
11
adapter.UpdateCommand = new SqlCommand("Update " + label1.Text + " set Link = @Link Where Link = @oldLink", connection);
 
SqlParameter parameter = new SqlParameter("@Link", SqlDbType.VarChar);
parameter.SourceColumn = "Link";
parameter.SourceVersion = DataRowVersion.Current;
adapter.UpdateCommand.Parameters.Add(parameter);
 
SqlParameter parameter1 = new SqlParameter("@oldLink", SqlDbType.VarChar);
parameter1.SourceColumn = "Link";
parameter1.SourceVersion = DataRowVersion.Original;
adapter.UpdateCommand.Parameters.Add(parameter1);
2
_nobody_
8 / 8 / 0
Регистрация: 18.04.2009
Сообщений: 115
02.07.2009, 13:02  [ТС] 9
Green, БОООООЛЬШОЕ СПИСИБО!!! ВСЕ ПОЛУЧИЛОСЬ!!!
1
02.07.2009, 13:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2009, 13:02

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

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

Как правильно сделать update с посредством dataadapter
Всем привет! Возник вопрос. Есть в бд табличка CountryId - int (ключ + индексируемый столбец)...


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

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

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