TableAdapter - обновление без ключа - PullRequest
0 голосов
/ 27 февраля 2009

Я новичок в бизнесе .net c # и на прошлой неделе увлекся созданием приложения для работы с формами для настройки SSIS. Гении из MS решили не применять ключ к таблице, с которой я работаю - и генерация составного ключа из двух полей-кандидатов не будет работать из-за слишком большой их длины. Я особенно не хочу связываться со схемой таблицы [ssis configurations], добавляя поле автоинкремента.

Так что у меня возникли большие проблемы с получением обновления от элемента управления DataGridView для работы с TableAdapter.

Мне нужно, чтобы оператором обновления была таблица обновлений a = x, где b = y и c = z.

Могу ли я установить метод обновления TableAdapter, и если да, то как. Если нет, что делать?

Я вижу этот автоматически сгенерированный код:

this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
            this._adapter.InsertCommand.Connection = this.Connection;
            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[SSIS Configurations Staging] ([ConfigurationFilter], [Configur" +
                "edValue], [PackagePath], [ConfiguredValueType]) VALUES (@ConfigurationFilter, @C" +
                "onfiguredValue, @PackagePath, @ConfiguredValueType)";

Но в моем коде формы команда UpdateCommand недоступна. Я предполагаю, что это потому, что приведенный выше код является определением класса, которое я не могу изменить после создания объекта. Я вижу, что этот код имеет рекомендацию не изменяться, так как он автоматически генерируется VS.

Спасибо за ваш самый прекрасный совет.

1 Ответ

2 голосов
/ 27 февраля 2009

Из вашего кода я предполагаю, что вы используете типизированный набор данных с конструктором.

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

Вы можете использовать окно свойств, чтобы добавить команду обновления в Apdapter, но я бы советовал против этого: если вы позже сконфигурируете свой основной запрос, он с радостью отбросит всю вашу работу. Тот же аргумент против изменения кода в любом файле * .Designer.cs.

Вместо этого дважды щелкните заголовок с именем адаптера. Дизайнер создаст (при необходимости) сопроводительный исходный файл, не относящийся к дизайнеру, и поместит в него внешнюю часть частичного класса. К сожалению, это то, как далеко заходит генерация кода в C #, вам придется оттуда его взять. (Помимо: VB-дизайнер знает еще несколько хитростей).

Edit:

Вы должны будете предоставить свой собственный метод Update (...) и настроить команду UpdateCommand и т. Д.

  var updateCommand = new SqlCommand();
  ...
...