Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
31.03.2004, 04:28
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
Есть форма, связанная с Dataset и отображающая поэлементно одну запись с заданным id. (напр., на форме - набор текстовых полей, связанных с соотв. столбцами таблицы). Изменяю данные в полях. Потом пытаюсь применить изменения, но данные не меняются в базе!!! код при обновлении - стандартный daPersons.Update(dsPersons,"Persons"); код для заполнения примерно такой: daPersons.SelectCommand.Parameters["@id"].Value = id; daPersons.Fill(dsPersons,"Persons"); Note. Перед обновлением смотрел на состояние записей - у всех стоит Unchanged. В чем проблема??? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 07:28
|
|||
---|---|---|---|
Проблема с обновлением |
|||
#18+
Значит комитите изменения перед вызовом метода Update. Привидите больше кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 12:37
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
По всей видимости не хватает FbCommandBuilder (FB - это просто провайдер такой, читай Ole) Вот как это работатет у меня: this.AddConnection(); FbDataAdapter dataAdapter = new FbDataAdapter(); dataAdapter.SelectCommand = new FbCommand("Select ID,SENDER,DATA,PARSERED From archive Where PARSERED = 0 Order By ID", this.myConnection); DataSet dataSet= new DataSet(); dataAdapter.Fill(dataSet,"archive"); // this.dataVarArray = new DataVar(); // this.Device = new DeviceUtils(); int[] id_array = new int[1000]; j = 0; foreach(DataTable dTable in dataSet.Tables) { // For each row, print the values of each column. foreach(DataRow myRow in dTable.Rows) { if(myRow[dTable.Columns["SENDER"]].ToString().Length != 0) { Device.dataArchive = Convert.ToString(myRow[dTable.Columns["Data"]]); this.Device.adress = Convert.ToString(myRow[dTable.Columns["Sender"]]); id_array[j] = Convert.ToInt32(myRow[dTable.Columns["ID"]]); this.GetDeviceId(Device.adress); this.GetNodesID(); this.ParseData(); myRow["PARSERED"] = 1; j++; } } } FbCommandBuilder builder = new FbCommandBuilder(dataAdapter); try { dataAdapter.Update(dataSet,"archive"); } catch(System.InvalidOperationException e) { MessageBox.Show("Update error: "+e); } this.CloseConnection(); ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 13:44
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
а помоему не хватает просто BindingContext[имя датасета, "имя таблицы"].EndCurrentEdit(); ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 13:58
|
|||
---|---|---|---|
Проблема с обновлением |
|||
#18+
Может не хватать чего угодно (или чего то лишком) пока код не увидим не определимся. >Note. Перед обновлением смотрел на состояние записей - у всех стоит Unchanged. 2 aoalex Из чего можно сделать вывод что Builder тут совсем ни причем. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 14:24
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
Тогда вопрос такой: если стоит unchanged и нет builder`a оно произведет обновление просто по update ? У меня так не проходило (наверное и не могло) И на счет BindingContext, оно испоьлзуется для control`ов на практике или есть и другие варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 14:40
|
|||
---|---|---|---|
Проблема с обновлением |
|||
#18+
>Тогда вопрос такой: если стоит unchanged и нет builder`a оно произведет обновление просто по update ? У меня так не проходило (наверное и не могло) Можно вполне обойтись без CommandBuilder'а. Есть он или нет дело десятое, если стоит unchanged то обновлять и нечего. >И на счет BindingContext, оно испоьлзуется для control`ов на практике или есть и другие варианты? Есть - можно вообще ничего ни с чем не связывать а делать все в ручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 15:18
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
Делаю daPersons на выборку одной записи из таблицы - запись задается параметром @id. в конструкторе формы - заполняется датасет: id=1; daPersonOne.SelectCommand.Parameters["@id"].Value = id; daPersonOne.Fill(dsPerson,"Persons"); После запуска формы - в поля загрузились данные этой записи. Поля связаны механизмом DataBinding с соотв. столбцами датасета Потом изменяю какое-то поле и нажимаю кнопку Update, полный код обработчика: string lname=""; DataRowState st; foreach (DataRow r in dvPerson.Table.Rows) { lname = (string)r["lastName"]; st = r.RowState; // Unchanged } //dsPerson.AcceptChanges(); //daPersonOne.UpdateCommand.Parameters["@id"].Value = id; daPersonOne.Update(dsPerson,"Persons"); пробовал и с AcceptChanges и с присвоением параметра нужного id НЕ работает ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 15:22
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
BindingContext[имя датасета, "имя таблицы"].EndCurrentEdit(); Это помогло!!!! В итоге код для обновления: BindingContext[dsPerson, "Persons"].EndCurrentEdit(); daPersonOne.Update(dsPerson,"Persons"); Спасибо !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 15:31
|
|||
---|---|---|---|
|
|||
Проблема с обновлением |
|||
#18+
еще вопрос в продожение темы Update Зачем Адаптер в команде Update создает куча лишних параметров, когда достаточно одного id? this.sqlUpdateCommand1.CommandText = @"UPDATE Persons SET tableNumber = @tableNumber, lastName = @lastName, firstName = @firstName, middleName = @middleName, birthdate = @birthdate WHERE (id = @Original_id) AND (birthdate = @Original_birthdate OR @Original_birthdate IS NULL AND birthdate IS NULL) AND (firstName = @Original_firstName) AND (lastName = @Original_lastName) AND (middleName = @Original_middleName OR @Original_middleName IS NULL AND middleName IS NULL) AND (tableNumber = @Original_tableNumber); SELECT id, tableNumber, lastName, firstName, middleName, birthdate FROM Persons WHERE (id = @id)"; Не проще ли огромный Where в Update заменить на WHERE (id = @id) ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 15:55
|
|||
---|---|---|---|
Проблема с обновлением |
|||
#18+
>Не проще ли огромный Where в Update заменить на WHERE (id = @id) Если хотите в Where только первичный ключ, то при конфигурировании DataAdapter в Advanced Options снимите флажок Use Optimistic concurrency. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
31.03.2004, 16:00
|
|||
---|---|---|---|
Проблема с обновлением |
|||
#18+
>пробовал и с AcceptChanges и с присвоением параметра нужного id AcceptChanges ставить нужно после Update если хотите чтобы что нибудь отправилось на обновление. Так то же не будет обновления, не смотря на EndCurrentEdit. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/search_topic.php?author=%D0%92%D0%B0%D1%81%D0%B8%D0%BB%D0%B8%D0%B9%D0%9F%D0%B5%D1%80%D0%BA%D0%B8%D0%BD&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
62ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 1653ms |
total: | 1847ms |
0 / 0 |