DbProviderFactoriesが提供する汎用DbConnectionを使用してDBにアクセスしています。接続を使用する前にOpenを呼び出す必要はありません。私は( "System.Data.SqlClient"または "Oracle.DataAccess.Client"をproviderInvariantNameパラメータとして使用して)動作しているサンプルコードを提供します。私は、明白なエラーなしで、明示的にOpenを呼び出していなくても、同様のコードですべてのCRUD操作を実行しました。最初に開くことなくDbConnectionを使用する
私はそれを閉じる必要はないことを理解しています。なぜならusingステートメントは接続の終了と処理を処理するからです。 しかし、このコードで接続が開かれているときは?それは、関連するDataAdapterのFillを呼び出すと自動的に開きますか?それを使用する前に接続オブジェクトでOpenを明示的に呼び出していないという結果はありますか? それは不必要な場合、私は確かにコードの行のカップルを保存することができますので。 ;-)
DbProviderFactory myFactoryProvider = DbProviderFactories.GetFactory("System.Data.SqlClient");// same with "Oracle.DataAccess.Client"
using (var myConnection = myFactoryProvider.CreateConnection())
using (var myCommand = myFactoryProvider.CreateCommand())
{
try
{
// Set up the connection
myConnection.ConnectionString = _someConnectionString;
myCommand.Connection = myConnection;
myCommand.CommandText = "SELECT * FROM SOME_TABLE";
// Create DataAdapter and fill DataTable
DbDataAdapter dataAdapter = myFactoryProvider.CreateDataAdapter();
dataAdapter.SelectCommand = myCommand;
DataTable myTable = new DataTable();
dataAdapter.Fill(myTable);
// Read the table and do something with the data
foreach (DataRow fila in myTable.Rows)
{
// Do something
}
}
catch (Exception e)
{
string message = e.ToString();
throw;
}
} //using closes and disposes the connection and the command
あるので、それが意味「しなければならない」んする必要があります? – Rodrigo
Fillメソッドの実行時に接続が開かれます。DataAdapterなどの切断されたADO.NETオブジェクトは、次のように動作します。Fillメソッドが実行されると、最初にdbへの接続が開かれ、コンテナとして機能し、塗りつぶされた後、接続が閉じられています。 –