зачем SqlDataAdapter.InsertCommand нужен другой SqlConnection? - PullRequest
0 голосов
/ 20 января 2012

Если я создаю

SqlDataAdapter adapterSales = new SqlDataAdapter (mySelectCommand, connString) 

, а затем создаю команду вставки для адаптера, скажем,

adapterSales.InsertCommand = new SqlCommand (myInsertCommand);

Почему мне нужно передать другое соединение последнему конструктору?Я имею в виду, если я уже передал строку подключения, почему адаптер не работает с этим для создания подключения SQL, с которым я собираюсь работать?

Ответы [ 3 ]

1 голос
/ 20 января 2012

Это командные объекты (выбрать, вставить, обновить, удалить), которые требуют подключения.Сам адаптер данных на самом деле не имеет определенного соединения, напрямую связанного с ним.Используя Reflector, я вижу, что следующие элементы являются членами SqlDataAdapter (в нем нет объекта соединения напрямую):

// Fields
private SqlCommandSet _commandSet;
private SqlCommand _deleteCommand;
private SqlCommand _insertCommand;
private SqlCommand _selectCommand;
private int _updateBatchSize;
private SqlCommand _updateCommand;
private static readonly object EventRowUpdated;
private static readonly object EventRowUpdating;

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

0 голосов
/ 20 января 2012

как указано в MSDN SqlDataAdapter

, команда InsertCommand может быть сгенерирована автоматически, если вы установите свойство SelectCommand и используете SqlCommandBuilder.

Когда InsertCommand назначается ранее созданному SqlCommand, SqlCommand не клонируется.InsertCommand поддерживает ссылку на ранее созданный объект SqlCommand.

Объект команды Ecah, связанный с соединением, поэтому каждый раз, когда ему требуется информация об объекте команды для выполнения операции.

0 голосов
/ 20 января 2012

Это параметр, необходимый конструктору SqlCommand, AFAIR InsertCommand может быть создан автоматически из команды select, тогда вам не нужно это дублирование даже для определения InsertCommand.

С MSDN

если информация о первичном ключе присутствует в наборе данных, команда InsertCommand может генерироваться автоматически, если вы установите свойство SelectCommand и используйте SqlCommandBuilder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...