powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема c dataAdapter.Update()
11 сообщений из 11, страница 1 из 1
Проблема c dataAdapter.Update()
    #32460376
aoalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в следующем:
заполняю 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");
}
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32460410
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если оставить в SelectCommand (для проверки) так?
Код: plaintext
1.
dataAdapter.SelectCommand.CommandText =  "Select ID,SENDER,DATA,PARSERED From [archive]" ;


И привидите как можно больше кода.
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32460420
aoalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот целиком функция, но мне кажется, что проблема с триггером и генератором.
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();
}
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32460492
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А поле ID - это первичный ключ? Какое СУБД используется?
Привидите структуру таблицы archive?
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461296
aoalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался. С ключом нашалил. Спасибо
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461316
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aoalex
Не в укор, но хорошим тоном на форуме считается публиковать решение даже если оно найдено самим автором , дабы мысля не пропадала и могла принести пользу в будущем :)
Т.е. обьясни плиз кратенько в чем была проблема с ключем.

Magnus
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461460
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кратенько - проблема в primary key.
ИМХО практически всегда можно (и нужно) избегать commandBuilder.
А если и использовать то проверять что он там генерит, а лучше свой builder написать.
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461466
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. какое отношение PK имеет к билдеру?
Точнее наоборот, что такого билдер намутило с ПК?

Или все таки проблема была в базе?

Magnus
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461537
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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....."
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461543
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае, зачем он вообще нужен? Лучше уж руками...
Для обновления еще понятно, но для селект команды то зачем?

Magnus
...
Рейтинг: 0 / 0
Проблема c dataAdapter.Update()
    #32461559
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак он вообще то по Selectу ориентируется как остальные комманды создавать, то есть ты ему один Select а он тебе вернет три комманда (insert, update, delete).

А вообще Command Builderа место - это тестовые приложения. Не вижу смысла его использовать в серьезных проектах где значительная часть логики проекта лежит в ХП на стороне сервера.

Ну для MS Access CommandBuilder тоже пойдет - small app вобщем.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема c dataAdapter.Update()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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