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

Переопределение запросов TableAdapter-a. Запросы UPDATE и DELETE

24.03.2012, 13:33. Просмотров 6489. Ответов 6
Метки нет (Все метки)

Изначально не удавалось отредактировать базу. На форумах нашёл, что неободимо посмотреть свойства TableAdaptera. Посмотрел - и действительно обнаружил, что команды DELETE и UPDATE - пусты. Попробовал переписать запросы самомстоятельно по примеру запросов INSERT и SELECT, которые были в адаптере - ничего не вышло.
С SQL знаком 2-ой день, поэтому полный профан здесь. Как написать запрос UPDATE для соей таблички? Редактирвоание я произвожу так: выделяю ячейку в datagride - ввожу значение в textbox и значение выделенной ячейки меняется на значение из textboxa.
Тоесть я не могу понять, какой мне запрос нужно написать - обновления всей таблицы или обновления только выделенной ячейки? Но и то, и то реализовать не сумел

Пожалуйста, кто сможет - ответьте. Скоро сдавать, а я застрял на мелочи.
Спасибо огромнейшее всем отозвавшимся!!!

Выкладываю фото своей базы, оформленные запросы INSERT и SELECT адаптера и кусок кода обработчика редактирования.

C#
1
2
3
4
5
6
            string text = textBox1.Text.ToString();
            dataGridView1.CurrentCell.Value = text;
            this.Validate();
            this.cartBindingSource.EndEdit();
            this.cartTableAdapter.Update(this.dataBaseOtdelDataSet.Cart);
            dataBaseOtdelDataSet.Cart.AcceptChanges();
SELECT [Код_карточки], [Номер_договора], [Фамилия], [Имя], [Отчество], [Дата_рождения], [Адрес_проживания], [Гражданство], [Стаж_работы], [Отдел], [Должность] FROM [Cart]

INSERT INTO [Cart] ([Код_карточки], [Номер_договора], [Фамилия], [Имя], [Отчество], [Дата_рождения], [Адрес_проживания], [Гражданство], [Стаж_работы], [Отдел], [Должность]) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11)
0
Миниатюры
Переопределение запросов TableAdapter-a. Запросы UPDATE и DELETE  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 13:33
Ответы с готовыми решениями:

Формирование Delete и Update запроса для tableAdapter
Добрый день! я формирую insert запрос для tableAdapter'ов(каждый адаптер...

Отсутствует метод Delete у TableAdapter'a
Подключил базу данных Access, хочу настроить удаление записей из таблицы и...

Объявлена война с TableAdapter.Update
Уже битый час с ним бьюсь. Не поддается. { passNO =...

TableAdapter.Update() дублирует строки в БД
Здравствуйте Никак не могу понять по какой причине Adapter упорно делает...

TableAdapter. Метод Update, написанный вручную, автоматически удаляется
в общем проблема заключается в следующем: в xxxDataSet.xsd в одном из...

6
11shepard11
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 9
24.03.2012, 14:28  [ТС] 2
АУ!!!!! Хоть кто-нибудь отзовитесь. Я уже с ума схожу. Как я уже не пробовал этот запрос оформить..
Хотя бы объясните, нужно ли указывать значения, которыми обновляешь таблицу?
или можно вставить вопросы (или @p1,@p2...)??
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
24.03.2012, 16:03 3
данные обрабатываются так:
1. при помощи адаптера и его метода Fill загружаются необходимые данные в объект DataTable(самостоятельный или в составе DataSet)
2. делается привязка данных при помощи свойства DataSource
- прямая - указать в DataSource объект с данными
- или через Binding, BindingSource и т.д.
3. при изменении данных в datagridview за счет привязки изменяются данные в объекте с данными
4. для сохранения данных необходимо
- или построчно пройтись по строкам DataTable и выполнить команду для загрузки/обновления данных
- или создать Adapter, команды InsertComand и UpdateCommand которого содержат параметры. вместо значений(Value) параметра необходимо указать значение SourceColumn - имя столбца в вашем DataTable

при использовании сторонних форм для ввода данных следует работать не с datagridview, а с объектом DataTable, который содержит данные. За счет привязки данные в Гриде обновятся автоматически.
0
11shepard11
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 9
24.03.2012, 19:30  [ТС] 4
Ну я так и делаю, мне нужно описать запрос на UPDATE. У меня при компиляции выскакивает ошибка на update, потому что не описан запрос в table adaptere.

Update requires a valid UpdateCommand when passed DataRow collection with modified rows.
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
24.03.2012, 20:54 5
Например, так
C#
1
2
3
4
5
6
7
8
9
10
private void btSave_Click(object sender, EventArgs e)
{
DataTable dt = datagridview1.DataSource as DataTable; //получили измененные данные
SqlConnection conn = ... ; 
SqlCommand comm = new SqlCommand("Update TableName Set Field1Name=@par1 ... where id= @par2)" , conn);
comm.Parameters.Add("@par1", SqlDbType.Int).SourceColumn = "Field1Name"; 
... //добавляем все параметры
SqlDataAdapter ad = new SqlDataAdapter ();
ad.UpdateCommand = comm;
ad.Update(dt);
0
11shepard11
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 9
24.03.2012, 23:09  [ТС] 6
Я подключаюсь через MS SQL Server 3.5 Compact
код такой же будет?

и что здесь будет являться параметром?
FieldName - это название поля. А @par1 это что?

Добавлено через 18 минут
база встроенная в шарпе .sdf

Добавлено через 35 минут
И в коде вашем дебаггер пишет, что dt=null..объект нулевой.
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
26.03.2012, 12:43 7
Я подключаюсь через MS SQL Server 3.5 Compact
код такой же будет?
приведенный код по идее не изменится, но я с этим чудом не работал, я норм сервер установил сразу.
база встроенная в шарпе .sdf
этот файл студия создает автоматически при использовании MS SQL Server 3.5 Compact

и что здесь будет являться параметром?
FieldName - это название поля. А @par1 это что?
это и есть параметр тип и значение которого задаются строчкой:

C#
1
2
3
comm.Parameters.Add("@par1", SqlDbType.Int).SourceColumn = "Field1Name";
//Первый параметр функции - имя параметра, второй - тип параметра
//SourceColumn  значение брать со столбца с именем Field1Name.
столбцы автоматически создает адаптер при выполнении Fill. Если указано

T-SQL
1
"Select Fielad1 as MyName from ..."
то имя столбца будет MyName, иначе будет совпадать с именем столбца в БД


И в коде вашем дебаггер пишет, что dt=null..объект нулевой.
просто я делаю так:
C#
1
2
3
4
5
6
7
DataTable dt = new DataTable();
using(SqlConnection conn = new SqlConnection("строка подключения"))
{
SqlDataAdapter ada = new SqlDataAdapter("Select * from Table", conn);
ada.Fill(dt);
}
dataGridView1.DataSource = dt;
и тогда дальше это работает:

C#
1
DataTable dt = datagridview1.DataSource as DataTable;
можно вместо объявление таблицы dt вынести за пределы функции и при сохранении напрямую ее использовать.

а вообще почитайте:
SqlCommand
SqlParameter
DataAdapter
Использование параметров
DataSource
0
26.03.2012, 12:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2012, 12:43

Что происходит при выполнении метода TableAdapter.Update()
Задача сохранять запись при переходи на следующую строку в DataGridView. ...

Не сохраняются изменения в базе данных после запуска метода Update класса TableAdapter
В принципе, проблема изложена в названии темы. Я самоучка, делаю всё так как...

Проблема с UPDATE и DELETE
Люди умные! Помогите пожалуйста! Такая ситуация: работаю в Micosoft Visual...


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

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

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