powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / покажите 1 раз как это правильно делается!
25 сообщений из 29, страница 1 из 2
покажите 1 раз как это правильно делается!
    #35506123
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ХП spSelectDoc, которая формирует и возвращает таблицу SELECT * FROM t1
Вот так я показываю эти данные в гриде (DataGridView)
Код: plaintext
1.
2.
adapt.SelectCommand.Parameters["@pK"].Value = ds1.tK[0]["id"];
adapt.Fill(ds1.spSelectDoc);
gridDoc.DataSource = ds1.spSelectDoc;
(для адаптера adapt прописана только строка SelectCommand)

пользователь поменял данные одного поля этой таблицы в самом гриде.
Как по кнопке "сохранить" обновить измененные им записи в БД?


всякие adpt.Update не помогают, а писать дополнительную хп и вешать её адаптеру для просто изменения строк не вижу смысла

Напишите, пож-та в виде кода кого не затруднит, очень хочу понять как это делается.
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35506460
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо использовать именно метод Update адаптера.

Но так как у вас UpdataCommand не заполненна то и ничего не выйдет.
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35506484
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegMidov
используйте CommandBuilder, если выборка простая и вам так лень вручную написать Update Command адаптеру.
Если же выборка из вьюхи или сложного запроса, то ручками, только ручками ;)
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35506559
TeXpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegMidovдля адаптера adapt прописана только строка SelectCommand И чего ты после этого хочешь?

Значит, книгу Сеппы так и не скачал? Тебе дали две живые ссылки. Там всё расписано, и коды есть:)). Видимо, не судьба тебе её скачать
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35506817
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я не понял как не передавая параметры сохранить изменения? т.е. сделать апдэйт? не считывать же данные построчно? что пишется в updatecommand что бы брались измененные данные грида и ими обновлялись строки в таблице t
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35506863
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(а книгу сеппы я смогу скачать только через 2 недели когда вернусь в город, а делать надо сейчас...)
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35506964
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати я уже писал в первом посте что ХП spSelectDoc формирует и возвращает таблицу
SELECT * FROM t1
её структура : (id - int; name - varchar(75), doc - varchar(15), sumR - money)
эту таблицу я показываю юзеру для редактирования поля sumR. и когда он отредактирует это поле и нажмет "сохранить" мне надо внести все изменения которые он сделал в гриде в таблицу t1.

повторюсь: как это делается? что прописать в UpdateCommand?
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507001
TeXpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты посты читаешь? Был же совет ...используйте CommandBuilder, если выборка простая и вам так лень вручную написать Update Command адаптеру
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507150
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть вопрос мой и покажется идиотским, но голова уже пухнет, всё таки спрошу

никаких намеков на wizard у этого компонента нет - ни по правой мыши ни по левой он ничего не показывает и не предлагает выбрать никакой пункт напоминающий генератор запроса.... Есть несколько свойств и все!!!
хотел прописать вручную (хотя вряд ли для этого был создан sqlCommandBuilder...) но на строке
Код: plaintext
 sqlCommandBuilder1 cb = new sqlCommandBuilder1(adapt);
выдается ошибка:
Error - 'sqlCommandBuilder1' is a 'field' but is used like a 'type'
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507172
TeXpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Афигеть... Вот это
Код: plaintext
sqlCommandBuilder1 cb = new sqlCommandBuilder1(adapt);
ты всерьёз так написал? А вот это 'sqlCommandBuilder1' is a 'field' but is used like a 'type' пытался понять?
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507337
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет конечно, естественно без 1
Код: plaintext
sqlCommandBuilder cb = new sqlCommandBuilder(adapt);
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507366
TeXpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegMidovнет конечно, естественно без 1 Да ну?:)) А откуда тогда это 'sqlCommandBuilder1' is a 'field' but is used like a 'type' Впрочем, повторю с точностью до изоморфизма: и вот это
Код: plaintext
1.
sqlCommandBuilder cb = new sqlCommandBuilder(adapt);
ты всерьёз так написал? А вот это 'sqlCommandBuilder1' is a 'field' but is used like a 'type' пытался понять?
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507379
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Error The type or namespace name 'sqlCommandBuilder' could not be found (are you missing a using directive or an assembly reference?)
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507397
Change
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegMidovError The type or namespace name 'sqlCommandBuilder' could not be found (are you missing a using directive or an assembly reference?)

А нэймспэйс System.Data.SqlClient не нужно подключать?
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507433
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sqlCommandBuilder cb = new sqlCommandBuilder(adapt);
adapt.SelectCommand.Parameters["@pK"].Value = ds1.tK[0]["id"];
adapt.Fill(ds1.spSelectDoc);
gridDoc.DataSource = ds1.spSelectDoc;

private void button1_Click(object sender, EventArgs e)
{
gridDoc.Refresh();
adapt.Update(ds1.spSelectDoc); // error
}
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507439
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

а что прописывается в UpdateCommand?
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507626
rdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OlegMidovDynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

а что прописывается в UpdateCommand?
Все поля которые нужно обновить. Типа update xxx set x = ww, y = e.... where id = @id
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507631
rdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://rsdn.ru/article/db/guide_firebird2_adonet3.xml
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507634
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да для того что бы разобраться можно сделать типизированный датасет, с одной таблицей и посмотреть как там все сделано, как отстроен TableAdapter.
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507695
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
исходя из примера:
Код: plaintext
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.
public void UpdateDataSet()
{
  DataSet dataSet = new DataSet();
  DataTable tbl = dataSet.Tables.Add("EMPLOYEE");

  using(OleDbConnection con = ConnectionProvider.CreateConnection())
  {
    con.Open();        
    OleDbDataAdapter adapter = 
      new OleDbDataAdapter("select * from EMPLOYEE", con);
    adapter.SelectCommand.Transaction = con.BeginTransaction();
    adapter.Fill(tbl);

    // вносим изменения в DataSet
    foreach (DataRow row in tbl.Rows)
      row["FIRST_NAME"] = row["FIRST_NAME"].ToString().ToUpper();

    // генерируем команды для операций update, insert и delete 
    OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(adapter);
    adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
    adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
    adapter.InsertCommand = cmdBuilder.GetInsertCommand(); 
 
    // обновление данных
    adapter.Update(tbl); 

    // откат сделанных изменений
    adapter.SelectCommand.Transaction.Rollback();
  }
}
сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
adapt.SelectCommand.Parameters["@pK"].Value = ds1.tK[0]["id"];
adapt.Fill(ds1.spSelectDoc);
gridDoc.DataSource = ds1.spSelectDoc;
внес изменения в гриде
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adaptTDoc);
adapt.UpdateCommand = cmdBuilder.GetUpdateCommand();  // error: Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.
adapt.Update(ds1.spSelectDoc);

по поводу rdfgВсе поля которые нужно обновить. Типа update xxx set x = ww, y = e.... where id = @id я знаю комманду update.
у меня структура такая: (таблица t1)
id - int; name - varchar(75), doc - varchar(15)
[/src]т.е. запрос должен быть такой :
Код: plaintext
update t1 set name=@name, doc=@doc where id=@id
но тогда мне ещё надо объявлять параметры в коде перед изменением данных и ещё им присваивать значения. на сколько я понял из того же примера (кот. щас тока написал) sqlCommandBuilder это всё должен делать сам. там об этом и речи не идет! не о каких параметрах!он сам должен выдергивать из грида нужные данные и обновлять таблицу на сервере!

как исправить эту ошибку, что я не дописал в своем коде?
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507704
rdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
da_list.UpdateCommand.Parameters.Add("@id", SqlDbType.Int, 10, "id");
da_list.UpdateCommand.Parameters.Add("@filmdate", SqlDbType.DateTime, 15, "filmdate");
и т.д.
где первый параметр это переменная которая будет использоваться в запросе, а самый последний завязка на колонку таблицы(не имя колонки а вроде как типа FieldName)
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507746
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... ну так как менять я буду только один столбец грида, то для обновления понадобится 2 параметра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
adapt.SelectCommand.Parameters["@pK"].Value = ds1.tK[0]["id"];
adapt.Fill(ds1.spSelectDoc);
gridDoc.DataSource = ds1.spSelectDoc;
//внес изменения в гриде
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapt);
adapt.UpdateCommand.Parameters.Add("@id", SqlDbType.Int, 10, "id");  // error: Object reference not set to an instance of an object.
adapt.UpdateCommand.Parameters.Add("@sumR", SqlDbType.Decimal, 10, "sumR");
adapt.UpdateCommand = cmdBuilder.GetUpdateCommand();  
adapt.Update(ds1.spSelectDoc);
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507789
rdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо в updatecommand прописать все переменные которые будут меняться и сам sql запросец на апдэйт. А то как потом это будет апдэйтиться не надо беспокоиться.
Например: по кнопке "Сохранить" вызывать метод - adapter.Update() и все.
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507808
OlegMidov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а тогда в чем будет смысл использования SqlCommandBuilder ? зачем он тогда вообще нужен будет и какую роль будет играть???
...
Рейтинг: 0 / 0
покажите 1 раз как это правильно делается!
    #35507820
rdfg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ща вылажу рабочую версию....
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / покажите 1 раз как это правильно делается!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]