Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / покажите 1 раз как это правильно делается! / 25 сообщений из 29, страница 1 из 2
26.08.2008, 12:53
    #35506123
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Есть ХП 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
26.08.2008, 14:30
    #35506460
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Необходимо использовать именно метод Update адаптера.

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

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

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

никаких намеков на wizard у этого компонента нет - ни по правой мыши ни по левой он ничего не показывает и не предлагает выбрать никакой пункт напоминающий генератор запроса.... Есть несколько свойств и все!!!
хотел прописать вручную (хотя вряд ли для этого был создан sqlCommandBuilder...) но на строке
Код: plaintext
 sqlCommandBuilder1 cb = new sqlCommandBuilder1(adapt);
выдается ошибка:
Error - 'sqlCommandBuilder1' is a 'field' but is used like a 'type'
...
Рейтинг: 0 / 0
26.08.2008, 18:06
    #35507172
TeXpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Афигеть... Вот это
Код: plaintext
sqlCommandBuilder1 cb = new sqlCommandBuilder1(adapt);
ты всерьёз так написал? А вот это 'sqlCommandBuilder1' is a 'field' but is used like a 'type' пытался понять?
...
Рейтинг: 0 / 0
26.08.2008, 20:27
    #35507337
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
нет конечно, естественно без 1
Код: plaintext
sqlCommandBuilder cb = new sqlCommandBuilder(adapt);
...
Рейтинг: 0 / 0
26.08.2008, 20:43
    #35507366
TeXpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
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
26.08.2008, 21:03
    #35507379
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Error The type or namespace name 'sqlCommandBuilder' could not be found (are you missing a using directive or an assembly reference?)
...
Рейтинг: 0 / 0
26.08.2008, 21:25
    #35507397
Change
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
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
26.08.2008, 22:10
    #35507433
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Код: 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
26.08.2008, 22:20
    #35507439
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

а что прописывается в UpdateCommand?
...
Рейтинг: 0 / 0
27.08.2008, 05:27
    #35507626
rdfg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
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
27.08.2008, 05:52
    #35507631
rdfg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
http://rsdn.ru/article/db/guide_firebird2_adonet3.xml
...
Рейтинг: 0 / 0
27.08.2008, 06:01
    #35507634
eJack
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Да для того что бы разобраться можно сделать типизированный датасет, с одной таблицей и посмотреть как там все сделано, как отстроен TableAdapter.
...
Рейтинг: 0 / 0
27.08.2008, 08:43
    #35507695
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
исходя из примера:
Код: 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
27.08.2008, 08:58
    #35507704
rdfg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Код: 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
27.08.2008, 09:30
    #35507746
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
хм... ну так как менять я буду только один столбец грида, то для обновления понадобится 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
27.08.2008, 10:06
    #35507789
rdfg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Необходимо в updatecommand прописать все переменные которые будут меняться и сам sql запросец на апдэйт. А то как потом это будет апдэйтиться не надо беспокоиться.
Например: по кнопке "Сохранить" вызывать метод - adapter.Update() и все.
...
Рейтинг: 0 / 0
27.08.2008, 10:13
    #35507808
OlegMidov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
а тогда в чем будет смысл использования SqlCommandBuilder ? зачем он тогда вообще нужен будет и какую роль будет играть???
...
Рейтинг: 0 / 0
27.08.2008, 10:19
    #35507820
rdfg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покажите 1 раз как это правильно делается!
Ща вылажу рабочую версию....
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / покажите 1 раз как это правильно делается! / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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