Выбор одной строки при работе с типизированными наборами данных - PullRequest
0 голосов
/ 13 июня 2010

У меня есть набранный набор данных в моем проекте. Я хотел бы заполнить таблицу данных только одной строкой вместо всех строк. Выбранная строка должна основываться на столбце первичного ключа. Я знаю, что мог бы изменить код конструктора для достижения этой функциональности, однако, если я изменю код в конструкторе, я рискую, что этот код будет удален, когда я обновлю свои данные через конструктор в будущем.

Так что я хотел изменить SelectCommand не в конструкторе, а непосредственно перед запуском MyTypedTableAdapter.Fill метода. Странно то, что дизайнер не создает SelectCommand! Он создает все другие команды, но не эту. Если бы он создал SelectCommand, я мог бы изменить его следующим образом:

this.operatorzyTableAdapter.Adapter.SelectCommand.CommandText += " WHERE MyColumn = 1";

Это далеко от совершенства, но, по крайней мере, мне не пришлось бы изменять работу дизайнера. к сожалению, как я сказал ранее, SelectCommand не создан. Вместо этого дизайнер создает что-то вроде этого:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void InitCommandCollection() {
    this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];
    this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
    this._commandCollection[0].Connection = this.Connection;
    this._commandCollection[0].CommandText = "SELECT Ope_OpeID, Ope_Kod, Ope_Haslo, Ope_Imie, Ope_Nazwisko FROM dbo.Operatorzy";
    this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
}

Это не имеет смысла, по моему мнению. Зачем создавать UpdateCommand, InsertCommand и DeleteCommand, но не создавать SelectCommand? Я мог бы выдержать это, но this._commandCollection является частным, поэтому я не могу получить к нему доступ вне кода класса.

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

Обратите внимание, что я использую .NET 3.5.

Я нашел эту статью о доступе к частным свойствам, но это касается .NET 4.0

Спасибо за ваше время.

1 Ответ

1 голос
/ 13 июня 2010

В конструкторе набора данных сначала настройте пару Таблица / Адаптер с базовым (все строки) запросом. Убедитесь, что он работает и обновляет / удаляет и т. Д.

Затем щелкните правой кнопкой мыши «Добавить запрос» и измените текст SQL на «WHERE MyId = @Id». Убедитесь, что вы держите те же столбцы. Выберите Next и вызовите сгенерированный метод "FillById ()".

Объявление, конечно, используйте FillById (id) вместо Fill () в нужных местах.

...