Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
Проблема в следующем: заполняю dataSet, изменяю данные, пытаюсь обновить базу данных. Выскакивает ошибка: Dynamic SQL generation for UpdateCommand is not supported against a SelectCommand that does not return any key column information. Вот select: "Select ID,SENDER,DATA,PARSERED From archive Where PARSERED = 0 Order By ID" Проблема по видимому в том, что я генерю ID по триггеру Before Update и генератор. До этого все работало. Но в чем ошибка и как с ней бороться не пойму. Кто сможет помочь, заранее спасибо. FbCommandBuilder builder = new FbCommandBuilder(dataAdapter); try { dataAdapter.Update(dataSet,"archive"); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 11:56 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
А если оставить в SelectCommand (для проверки) так? Код: plaintext 1. И привидите как можно больше кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 12:14 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
Вот целиком функция, но мне кажется, что проблема с триггером и генератором. public void ParseArchive() { 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(dataSet.Tables["archive"].Rows.Count); 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) { dataVarArray.dataArchive = Convert.ToString(myRow[dTable.Columns["Data"]]); dataVarArray.adress = Convert.ToString(myRow[dTable.Columns["Sender"]]); id_array[j] = Convert.ToInt32(myRow[dTable.Columns["ID"]]); 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(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 12:19 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
А поле ID - это первичный ключ? Какое СУБД используется? Привидите структуру таблицы archive? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 12:51 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
Разобрался. С ключом нашалил. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 18:07 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
2 aoalex Не в укор, но хорошим тоном на форуме считается публиковать решение даже если оно найдено самим автором , дабы мысля не пропадала и могла принести пользу в будущем :) Т.е. обьясни плиз кратенько в чем была проблема с ключем. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 18:18 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
Кратенько - проблема в primary key. ИМХО практически всегда можно (и нужно) избегать commandBuilder. А если и использовать то проверять что он там генерит, а лучше свой builder написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 20:40 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
Ок. какое отношение PK имеет к билдеру? Точнее наоборот, что такого билдер намутило с ПК? Или все таки проблема была в базе? Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 20:46 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
2 Magnus Проблема в базе, А у CommandBuilder есть ряд ограничивающих его применение факторов (требования в общем) обратимся к классике: "There are several other limiting factors as well: Your SelectCommand must retrieve at least one PrimaryKey or unique column as part of the query. Just having a TimeStamp column without a PrimaryKey of some kind won't work....." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 23:19 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
В таком случае, зачем он вообще нужен? Лучше уж руками... Для обновления еще понятно, но для селект команды то зачем? Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2004, 23:36 |
|
||
|
Проблема c dataAdapter.Update()
|
|||
|---|---|---|---|
|
#18+
Дак он вообще то по Selectу ориентируется как остальные комманды создавать, то есть ты ему один Select а он тебе вернет три комманда (insert, update, delete). А вообще Command Builderа место - это тестовые приложения. Не вижу смысла его использовать в серьезных проектах где значительная часть логики проекта лежит в ХП на стороне сервера. Ну для MS Access CommandBuilder тоже пойдет - small app вобщем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2004, 00:26 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32461296&tid=1439366]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 311ms |
| total: | 439ms |

| 0 / 0 |
