Вот код типичной сгенерированной дизайнером функции Table Adapter:
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
[global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
public virtual Styles.OrdersDataTable GetOrders() {
this.Adapter.SelectCommand = this.CommandCollection[0];
Styles.OrdersDataTable dataTable = new Styles.OrdersDataTable();
this.Adapter.Fill(dataTable);
return dataTable;
}
Согласно MSDN, DbDataAdapter.Fill
ведет себя так:
Метод Fill извлекает строки из источника данных, используя инструкцию SELECT, указанную связанным свойством SelectCommand. Объект соединения, связанный с оператором SELECT, должен быть действительным, но его не нужно открывать. Если соединение закрывается до вызова Fill, оно открывается для извлечения данных, а затем закрывается. Если соединение открыто до вызова Fill, оно остается открытым.
Ссылка: Метод заполнения (DataTable)
Однако в сгенерированном дизайнером Insert / Delete / Update код будет выглядеть так:
global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open)
!= global::System.Data.ConnectionState.Open)) {
this.Adapter.InsertCommand.Connection.Open();
}
try {
int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
return returnValue;
}
finally {
if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
this.Adapter.InsertCommand.Connection.Close();
}
}