|
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, 12:00 |
|
Update
|
|||
---|---|---|---|
#18+
в твоей ошибке явно сказано что "SelectCommand that does not return any key column information" ключевое слово здесь key - простите за тавтологию :)) то есть для того чтобы идентифицировать строку АВТОМАТИЧЕСКИ так как это делаете вы (то есть не явно указываете как это можно было бы сделать SQLDataAdapter.UpdateCommand="UPDATE archive SET ID=p1" SQLDataAdapter.Parameters.Add(p1)....... ............как то так...............) вместо этого вы делаете УНИВЕРСАЛЬНУЮ а значит не самую лучшую композицию, когда вы динамически определяете, ЧТО у вас будет в гриде (селектом) и соответсвенно ЧТО вы будете апдейтить. так как вам ЯВНО написали в перечисленных вами полях НЕТУ ни одного ключевого (!!!) поля - вам придется либо отказатся от билдера комманд, либо отказатся от БД триггера на ID поле - что само по себе, если не нонсенс - то во всяком случае - одна из причин для тормозов и некорректной работы... --- к примеру могу сказать еще, что я столкнулся с этим сообщением, когда писал компонент грид с панелью кнопок, в которых уже были поиск, сортировка, добавка записей, удаление записей, апдейт естессно, экспорт данных в эксель, текстовый файл,...... ну и прочее прочее.........(че то я расписался так вот этому компоненту требовалость только строка подключения и запрос на выборку - ну и при необходимости можно было указать свойства некоторых полей, ну какие то запретить на ввод, какие то поставить в identity и прочее.... так вот для такой конструкции понадобился билдер комманд, можно конечно было написать свой анализатор селект запроса ну уж больно не хотелось и тут я понял, что я обязан в селекте передавать ему КЛЮЧЕВОЕ поле... кроме того я обнаружил еще одну интересную особенность, связанную с свойствами полей в DataTable, но я не буду писать - может кто сам найдет... на мой взгляд это глюк - надо будет проверить на других машинах ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2004, 16:37 |
|
Update
|
|||
---|---|---|---|
#18+
Спасибо за совет, проблема была в том, что поле id задал как уникальное, а ни как первичное и не заметил этого. А на счет использования builder`a, должно все работать и так, оно и работает :). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2004, 17:24 |
|
Update
|
|||
---|---|---|---|
#18+
а я не говорил что работать не будет... :) не работать и не корректно работать - разные вещи, как мне кажется ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2004, 17:43 |
|
Update
|
|||
---|---|---|---|
#18+
а я что сказал - я сказал что он не определяет ключа вы сделали первичный ключ и все заработало - разве не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2004, 17:45 |
|
Update
|
|||
---|---|---|---|
#18+
Ошибка, которая вылезала у меня, была связана с "неправильной" БД. А dataBuilder это средство ADO.NET. Работает оно более или менне, хотя реализовано не совсем отимально (мое мнение). Что касается ключевого поля: в данном случае разницы я не вижу, если оно получает ключевое поле из БД, то оно его туда и запишет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2004, 18:06 |
|
Update
|
|||
---|---|---|---|
#18+
слов нет!!! с формальной логикой БОЛЬШИЕ проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2004, 09:19 |
|
Update
|
|||
---|---|---|---|
#18+
sql2k вам придется либо отказатся от билдера комманд, либо отказатся от БД триггера на ID поле Ладно, отвечу за логику: вот это тоже особой логикой не страдает, хотя сам совет правильный. Чем больше прописывать руками, тем выше надежность (или я опять чего не понял). А логика моя заключается в том, что ошибка заключалась в другом, в самой БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2004, 10:01 |
|
Update
|
|||
---|---|---|---|
#18+
автортак как вам ЯВНО написали в перечисленных вами полях НЕТУ ни одного ключевого (!!!) поля ВАМ НАПИСАЛИ НЕТ УКАЗАННОГО КЛЮЧЕВОГО ПОЛЯ! ВЫ ЖЕ НЕ ПРИВЕЛИ СКРИПТ, КОТОРЫМ ВЫ СОЗДАЕТЕ ТАБЛИЦУ archive, СООТВЕТСВЕННО Я НЕ МОГ ЗНАТЬ PRIMARY KEY У ВАС ТАМ ИЛИ UNIQUE НА ПОЛЕ ID... Я ВАМ СКАЗАЛ ГДЕ НАДО РЫТЬ - ТО ЕСТЬ ВКЛЮЧИТЬ В ЗАПРОС КЛЮЧЕВОЕ ПОЛЕ ИЛИ ОТКАЗАТЬСЯ ОТ БИЛДЕРА... КАК ЭТО СДЕЛАТЬ - ВАМ РЕШАТЬ! ЕСЛИ ОТ БИЛДЕРА ОТКАЗЫВАТСЯ НЕ ХОТИМ - ЗНАЧИТ НАДО ВВОДИТЬ КЛЮЧЕВОЕ ПОЛЕ - ОПЯТЬ ПОВТОРЯЮ Я НЕ ЗНАЮ ЕСТЬ ОНО У ВАС В ТАБЛИЦЕ ИЛИ НЕТ - ТО ЧТО ПОЛЕ ИМЕЕТ ИМЯ ID НИ О ЧЕМ НЕ ГОВОРИТ... если хотите использовать поле ID как ключевое используйте, хотите завести другое - заводите - но его тогда придется вписывать в запрос... вы спрашиваете: я сижу дома, а мне надо на работу. что делать? я отвечаю: либо вызовите такси, либо езжайте на общественном транспорте вы говорите: не, не катит!!! потому что я то дома, а общественный транспорт и такси на улице! вы спросили в чем проблема: я ответил - в запросе СЕЛЕКТ нет ключевого поля. (точнее даже не я ответил, вам все ответил .Net Framework) ВСЕ! теперь только так буду отвечать - а то потом начинаеш давать объяснения - и некоторые люди не всасывают тему... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2004, 13:37 |
|
|
start [/forum/topic.php?fid=17&msg=32461243&tid=1354174]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 359ms |
0 / 0 |