Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/63: Рейтинг темы: голосов - 63, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 3
1

Функция update() адаптера не сохраняет изменения в БД

19.04.2009, 16:57. Показов 12162. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Создал в Visual Studio 2008 баззу данных, добавил в неё таблицу test c полями id типа int и name string. Создал типизированный Dataset, добавил в него оную таблицу. Далее на форму нанёс DataGridView, поставил в его свойство Datasourse таблицу test. Добавил кнопку. На нажатие кнопки повесил код:
C#
1
2
        private void button1_Click(object sender, EventArgs e)
        {testTableAdapter.Adapter.Update(testDatabaseDataSet,"test");}
пробовал так же
C#
1
testTableAdapter.Update(testDatabaseDataSet,"test");
Эффеки был одинаков:
После внесений изменений в DatagridView нажатие кнопки не вызывает сохранение данных. Попробовал в QueryBuilder проверить Insert команду адаптера, её текст:
C#
1
"INSERT INTO [test] ([name]) VALUES (@p1)"
В QueryBuilder при набранной этой команде нажал Execute Command. Меня спросили параметр @p1. Я вёл его и команда успешно выполнилась, соответствующая строка в бд вставилась. ПОпробовал добавить строку методом
C#
1
testTableAdapter.Insert()
Данные не были добавленны.
Причём проверял что возвращает Update() - всегда возвращал число стро, которые надо было добавить/обновить.
ConnectionString я не проверял, т.к. выборка проходит правильно, а у адаптера строка подключения одна для всех запросов.
будьте добры, подскажите куда копать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2009, 16:57
Ответы с готовыми решениями:

UPDATE не сохраняет изменения в БД
Всем привет! Я только начинаю изучать программирование и столкнулся с проблемой которую не могу...

Не получается записать через метод Update адаптера только обновленные записи DataTable
Использую параметризированный dataset не получается передать в метод Update адаптера только...

ADODataSet не сохраняет изменения
Доброго времени суток, возникла проблема. после модификации ячеек таблицы подключенной через...

Не сохраняет в базу изменения
Есть форма с dgv. При нажатие на кнопку "изменить данные" открывается новая форма, где выводится в...

14
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
19.04.2009, 18:43 2
Цитата Сообщение от PADOCTb Посмотреть сообщение
Добрый день!

Создал в Visual Studio 2008 баззу данных, добавил в неё таблицу test c полями id типа int и name string. Создал типизированный Dataset, добавил в него оную таблицу. Далее на форму нанёс DataGridView, поставил в его свойство Datasourse таблицу test. Добавил кнопку. На нажатие кнопки повесил код:
C#
1
2
        private void button1_Click(object sender, EventArgs e)
        {testTableAdapter.Adapter.Update(testDatabaseDataSet,"test");}
пробовал так же
C#
1
testTableAdapter.Update(testDatabaseDataSet,"test");
Эффеки был одинаков:
После внесений изменений в DatagridView нажатие кнопки не вызывает сохранение данных. Попробовал в QueryBuilder проверить Insert команду адаптера, её текст:
C#
1
"INSERT INTO [test] ([name]) VALUES (@p1)"
В QueryBuilder при набранной этой команде нажал Execute Command. Меня спросили параметр @p1. Я вёл его и команда успешно выполнилась, соответствующая строка в бд вставилась. ПОпробовал добавить строку методом
C#
1
testTableAdapter.Insert()
Данные не были добавленны.
Причём проверял что возвращает Update() - всегда возвращал число стро, которые надо было добавить/обновить.
ConnectionString я не проверял, т.к. выборка проходит правильно, а у адаптера строка подключения одна для всех запросов.
будьте добры, подскажите куда копать
Копать конечно нужно, : ) но посмотри пож-та на этот пример.

C#
1
2
3
4
5
6
7
8
9
10
11
12
        static string connection = "Data Source=ATA\\SQLEXPRESS;Initial Catalog=Kurs;Integrated Security=SSPI;Pooling=False";
        SqlConnection con;
        SqlCommand cmd;
        private void button1_Click(object sender, EventArgs e)
        {
            string command = "INSERT INTO  Members(Surname,Name,Age)values('ЗначениеSurname','ЗначениеName','Age')";
            con = new SqlConnection(connection);
            cmd = new SqlCommand(command, con);
            con.Open();
            cmd.ExecuteNonQuery();
            Form1_Load(null, null);
        }
Если что не понятно пиши отвечу с удовольствием!!!!!!!11
0
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 3
20.04.2009, 15:59  [ТС] 3
Цитата Сообщение от A_R_S Посмотреть сообщение
Копать конечно нужно, : ) но посмотри пож-та на этот пример.

static string connection = "Data Source=ATA\\SQLEXPRESS;Initial Catalog=Kurs;Integrated Security=SSPI;Pooling=False";
SqlConnection con;
SqlCommand cmd;
private void button1_Click(object sender, EventArgs e)
{
string command = "INSERT INTO Members(Surname,Name,Age)values('ЗначениеSurname','ЗначениеName','Age')";
con = new SqlConnection(connection);
cmd = new SqlCommand(command, con);
con.Open();
cmd.ExecuteNonQuery();
Form1_Load(null, null);
}
Если что не понятно пиши отвечу с удовольствием!!!!!!!11
Не понятно к чему это...
пробовал вручную открывать соединение, Эффект тот же. проверял ConnectionString-в норме

Добавлено через 17 часов 19 минут 13 секунд
файл с ДБ кидался в каталог Debug или Release там ее и менял
0
0 / 0 / 1
Регистрация: 18.03.2009
Сообщений: 32
21.04.2009, 08:06 4
Цитата Сообщение от PADOCTb Посмотреть сообщение
Form1_Load(null, null);
Кто нибуть объясните зачем нужна эта строчка
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
21.04.2009, 10:12 5
не обращай на неё внимание, а со своего проекта НЕМЕДЛЕННО удали!

Добавлено через 4 минуты 51 секунду
PADOCTb, для того чтобы работал Update и долго сним не возиться, то лучше создавать датасеты, адаптеры и соурсы дизайнером. Если есть у тя ггрид, то нажми на стрелку что вверху справа -> Add project dataSource -> database -> New Connection
1
0 / 0 / 1
Регистрация: 18.03.2009
Сообщений: 32
21.04.2009, 12:24 6
Цитата Сообщение от IT-Skyline Посмотреть сообщение
не обращай на неё внимание, а со своего проекта НЕМЕДЛЕННО удали!
Удалить я ее не могу так-как, после нее у меня обновлется GridView, когда я начал программировать на с#, примерно месяц назад, у меня тоже не обновлялись данные.
Может быть я и двигаюсь в неправильном напровлении но пока справляюсь с поставленными задачами, хотя иногда понимаю что-то какие-то действия я делаю не так.
И хотел бы поднять в данной теме такое обсуждение как правильно использовать компоненты для работы с ADO.NET, т.к. я просмотрев разные темы форума понял что каждый работает по своим правилам.
Я как програмист БД на VFP, переходящий c# и ADO, делаю так:
Приложение запускается с проверкой данных пользователя на сервере, на главной форме у меня нет ни каких датасетов и адаптеров, при вызове какой-либо форме создаетется датасет, адаптер и прикручивается к элементам управления, если с этой формы нужно вызвать какой-то экземпляр с более подробной информации для редактирования, или справочник, то другой форме просто передается один-два параметра этого экземпляра, в которой существуют свои датасеты и адаптеры и они в свою очередь выбирают нужные данные с сервера, после сохранения и закрятия вызывается матод на подобие Form1_Load(null, null); все обновилось все довольны.
Ну вот как так я начал работать. Готов принять разные критики и обсуждения.
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
21.04.2009, 13:20 7
У адаптера есть свойство Fill. И если сдлеать
C#
1
MyAdapter.Fill(MyDataSet.MyTable);
То данные обновятся
0
0 / 0 / 1
Регистрация: 18.03.2009
Сообщений: 32
21.04.2009, 13:57 8
IT-Skyline,
Да я пробовал так, но почему-то он просто записывает еще раз в таблицу данный с сервера после выполнения метода, а не обновляет, может сначала Reset, или он вообще сбросит все параметры?
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
21.04.2009, 15:26 9
Update(Dataset.DataTable) -- передаёт все изменения таблицы на сервер
Fill(Dataset.DataTable) -- заполняет таблицу данными из сервера.
1
0 / 0 / 1
Регистрация: 18.03.2009
Сообщений: 32
22.04.2009, 06:32 10
IT-Skyline,
тогда как просто обновить данные с сервера, ведь может на сервере уже появились новые данные от других юзеров?
0
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
22.04.2009, 11:17 11
Цитата Сообщение от alexbog80 Посмотреть сообщение
Кто нибуть объясните зачем нужна эта строчка
Эта строчка вызывает метод загрузки формы т.е. без этого метода при добавлении данных в базу эти данные не будут отображаются в датагридвиавере. (типа "Обновить")

Добавлено через 15 минут 39 секунд
Цитата Сообщение от PADOCTb Посмотреть сообщение
Добрый день!

Создал в Visual Studio 2008 баззу данных, добавил в неё таблицу test c полями id типа int и name string. Создал типизированный Dataset, добавил в него оную таблицу. Далее на форму нанёс DataGridView, поставил в его свойство Datasourse таблицу test. Добавил кнопку. На нажатие кнопки повесил код:
C#
1
2
        private void button1_Click(object sender, EventArgs e)
        {testTableAdapter.Adapter.Update(testDatabaseDataSet,"test");}
пробовал так же
C#
1
testTableAdapter.Update(testDatabaseDataSet,"test");
Эффеки был одинаков:
После внесений изменений в DatagridView нажатие кнопки не вызывает сохранение данных. Попробовал в QueryBuilder проверить Insert команду адаптера, её текст:
C#
1
"INSERT INTO [test] ([name]) VALUES (@p1)"
В QueryBuilder при набранной этой команде нажал Execute Command. Меня спросили параметр @p1. Я вёл его и команда успешно выполнилась, соответствующая строка в бд вставилась. ПОпробовал добавить строку методом
C#
1
testTableAdapter.Insert()
Данные не были добавленны.
Причём проверял что возвращает Update() - всегда возвращал число стро, которые надо было добавить/обновить.
ConnectionString я не проверял, т.к. выборка проходит правильно, а у адаптера строка подключения одна для всех запросов.
будьте добры, подскажите куда копать
К датагридвиаверу привяжи базу мастером как говорил IT-Skyline. (в правом верхнем углу щелкаеш по стрелочке ....). после завершения работы мастера автоматически создастся датасет и датаадаптер. Теперь для Update делаеш следующее:

Ocon = new OleDbConnection(con);
Ocom = new OleDbCommand();
Ocom.Connection = Ocon;
Ocom.CommandType = CommandType.Text;
Ocom.CommandText = "Update Reg set ball1tur = @ball where ID=@id";//@ball просто переменная
regTableAdapter.Update(baseDataSet.Reg); //созданное само при отображении базы в гриде : regTableAdapter,baseDataSe

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


УДАЧИ!!!
если что пиши.


при завершении мастера

Добавлено через 2 минуты 20 секунд
К датагридвиаверу привяжи базу мастером как говорил IT-Skyline. (в правом верхнем углу щелкаеш по стрелочке ....). после завершения работы мастера автоматически создастся датасет и датаадаптер. Теперь для Update делаеш следующее:

Ocon = new OleDbConnection(con);
Ocom = new OleDbCommand();
Ocom.Connection = Ocon;
Ocom.CommandType = CommandType.Text;
Ocom.CommandText = "Update Reg set ball1tur = @ball where ID=@id";//@ball просто переменная
regTableAdapter.Update(baseDataSet.Reg); //созданное само при отображении базы в гриде : regTableAdapter,baseDataSe

этот код для кнопки сохранить в моем случае. Сдесь я данные изменяю на самом датагридвиавере


УДАЧИ!!!
если что пиши.
0
5 / 5 / 0
Регистрация: 19.09.2008
Сообщений: 71
25.04.2009, 18:18 12
У меня тоже есть вопрос по обновлению.Хоть убейте) не могу понять почему не работает такой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
SqlConnection con = new SqlConnection(connection);
            SqlCommand cmd = new SqlCommand("InsertNewCountry", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Country", SqlDbType.NVarChar, 49));
            cmd.Parameters["@Country"].Value = newcountrytbx.Text;
                con.Open();
                int i = cmd.ExecuteNonQuery();
                if (i > 0)
                {
 countryTableAdapter.Fill(countryDataSet.Country);//заново                                                заполняю таблицу
                    countryBindingSource.DataSource = countryDataSet;
                    countryDataSet.AcceptChanges();//применяю изменения
                }
Почему я должен обновлять данные через датаадаптер?Почему не срабатывает cmd.ExecuteNonQuery(); хотя процедура сама работает?
0
Комбайнёр
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
25.04.2009, 19:54 13
Почему не срабатывает cmd.ExecuteNonQuery(); хотя процедура сама работает?
Процедура добавляет данные в таблицу?

Почему я должен обновлять данные через датаадаптер?
Это один из методов работы с БД, можете и не использовать адаптер. А если вы пользуетесь MSSQL Server и у вас стоит студия 2008, то можете использовать LINQ
0
5 / 5 / 0
Регистрация: 19.09.2008
Сообщений: 71
25.04.2009, 20:17 14
Да процедура при выполнении cmd.ExecuteNonQuery();(из примера который я привел) добавляет новые данные, но фактически в базе данных новые данные не появляются
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
02.05.2009, 08:21 15
Цитата Сообщение от rwety Посмотреть сообщение
Почему я должен обновлять данные через датаадаптер?Почему не срабатывает cmd.ExecuteNonQuery(); хотя процедура сама работает?
SqlDataAdapter.Update делает теже манипуляции по обновлению, что и ручками, через SqlCommand. С той разницей, что в нем содержатся и insert, и update, и delete запросы. При этом передавая ему DataTable, он сам находит строки, которые подлежат вставке/обновлению/удалению и производит все действия сразу. Иначе все это вы будете делать это ручками. Это не сложно, но нужно ли?
1
02.05.2009, 08:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2009, 08:21
Помогаю со студенческими работами здесь

Нажимаю изменения параметров адаптера, а там пусто
не думал что в 15 году столкнусь с такой же ерундой на одной из машин в сети такое же как у автора...

Выясните, сохраняет ли булева функция 0, 1, является ли функция линейной, монотонной, само двойственной?
Помогите пожалуйста!!! Булева функция задана вектором значений F(x)=(1001) Выясните, сохраняет...

не сохраняет изменения Тип данных
При изменении: Тип данных на Денежный, Формат поля: Денежный. Формат поля изменяется на Евро при...

Builder не сохраняет изменения в проекте
Чтобы изменения кода программы вступили в силу, приходится постоянно закрывать Builder , удалять...

Не сохраняет изменения в формате csv
Добрый день! я столкнулась с проблемой: не сохраняются изменения, сделанные в csv формате. я...

Сохраняет изменения в таблице по настроению
Я в Делфи нулевой, пока ещё учусь и многого не знаю. Так что сильно не ругайтесь за тупой вопрос,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru