Что случилось с командами Update и Delete моего TableAdapter? - PullRequest
5 голосов
/ 05 июня 2009

Я борюсь с непокорным конструктором DataSet VS2008, кажется. Я пытался сделать то, что кажется простым решением для набора из двух таблиц, где одна таблица представляет собой просто текстовое значение для целочисленного значения, хранящегося в другой таблице. Основные данные дизайна 101.

Table1
CharField1
CharField2
IntForeignKeyField1
etc

Table2
IntPrimaryKey1
ValueForKeyField

Это на самом деле не влияет на мою проблему, я не верю, так как я не хочу ничего делать, кроме чтения значений из второй таблицы, чтобы я мог выбрать их в DataGridViewComboBoxColumn на клиенте - - Я никогда не буду редактировать их на клиенте. Но я отвлекся.

Так как он находится в веб-сервисе, и я хотел, чтобы набор данных со строгой типизацией доставлялся клиентам этого веб-сервиса, я решил использовать DataSet Designer для создания адаптеров таблиц и всей системы, полагая, что это может оказаться менее трудоемким. и проще в обслуживании.

Итак, я создал красивые коробки и отредактировал операторы select, попросив дизайнера создать все команды Insert, Update и Delete для использования адаптера таблицы. Он с радостью согласился, сообщив мне, что все сделано, как я просил.

Однако, когда я попытался использовать оператор Update, я получил сообщение об отсутствии действительного оператора Update! После некоторых бесполезных поисков в сети людей с похожими проблемами я копался в XML для набора данных. Конечно же, нет оператора Update и оператора Delete.

Я попытался полностью удалить и воссоздать DataSet из проекта, с теми же результатами. Операторы Update или Delete не создавались, даже если об этом сообщалось как о выполненных.

Я закончил сборку XML оператора Update вручную, проверив другой разработанный набор данных из другого проекта, поэтому веб-служба теперь работает. Тем не менее, я не верю, что мои изменения будут длиться через редактирование, инициированное дизайнером, и я озадачен, почему он не работает. Есть идеи?

Спасибо за любые отзывы, Dave

Ответы [ 5 ]

13 голосов
/ 29 июля 2009

Может ли быть так, что для таблицы не определен уникальный первичный ключ?

0 голосов
/ 15 июля 2014

То, что предложил Джордж, прекрасно. Нам нужно включить опцию «Создать вставку, обновить, удалить выписки».

Однако в VS2013 использование ненужных квалификаторов таблиц в операторе selete может нарушить IDE и привести к генерации только операторов SELECT и INSERT. Просто удалите этот классификатор, и все должно быть в порядке. Убедитесь, что у вас есть уникальный ПК.

Если вам нужно использовать сложное заполнение, такое как применение фильтра, для возврата только определенных строк таблицы, вы можете заполнить таблицу данных с помощью специального оператора select в событии загрузки формы. Таким образом, сгенерированные операторы INSERT, UPDATE и DELETE будут по-прежнему работать, потому что DELETE и UPDATE работают на PK.

0 голосов
/ 27 августа 2009

Просто столкнулся с той же основной проблемой. Я сказал дизайнеру данных создать все операторы вставки, обновления, удаления. Когда я пошел обновить одну из таблиц, обновления не было. Я наконец вошел в файл .xsd, созданный дизайнером данных (просто дважды щелкнул, чтобы открыть его в IDE). Затем я щелкнул правой кнопкой мыши на строке заголовка таблицы, в которой возникла проблема, и выбрал опцию конфигурации. Оттуда я нажал кнопку «Дополнительные параметры», затем выбрал «Создать вставку, Обновить, Удалить выписки». После нажатия Okay я проверил свой проект, и обновление было доступно для настольного адаптера.

0 голосов
/ 30 июля 2009

Я думаю, что нашел решение. 1) Создайте TableAdapter только для основной таблицы и скопируйте процедуру UPDATE TableAdapter (хранится в окне свойств TableAdapter) 2) Измените запрос SELECT в «конструкторе запросов мастера настройки адаптера таблиц», чтобы включить поля из обеих таблиц и объединение. 3) Вставьте старую процедуру UPDATE в теперь пустую процедуру UPDATE TableAdapter. 4) После создания DataGridView вы можете отобразить поля из обеих таблиц и обновить основную таблицу. Повторите шаги для команд INSERT & DELETE.

Если ваша цель - обновить обе таблицы, попробуйте просмотреть информацию об обновлении родительского / дочернего элемента TableAdapter в Интернете. Вот хорошая ссылка: http://blogs.msdn.com/bethmassi/archive/2009/05/14/using-tableadapters-to-insert-related-data-into-an-ms-access-database.aspx

0 голосов
/ 30 июля 2009

У меня такая же проблема. TableAdapter не работает должным образом при использовании полей из более чем одной таблицы. Мне удалось заново создать решение из следующей статьи: «Обновление адаптера таблицы для использования объединений».

http://www.asp.net/learn/data-access/tutorial-69-vb.aspx

Решение включает в себя создание собственных процедур выбора / обновления / вставки / удаления. К сожалению, хотя я смог следовать решению для базы данных sqlserver, я все еще не смог заставить его работать для моей локальной базы данных Access. Все параметры хранимой процедуры выделены серым цветом.

Удачи!

...