2016-06-15 4 views
1

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 

答えて

0

デシベルへの接続が確立したときに文が

dataAdapter.Fill(myTable); 

実行開け、あなたのコードが行くだけでなく、

+0

あるので、それが意味「しなければならない」んする必要があります? – Rodrigo

+1

Fillメソッドの実行時に接続が開かれます。DataAdapterなどの切断されたADO.NETオブジェクトは、次のように動作します。Fillメソッドが実行されると、最初にdbへの接続が開かれ、コンテナとして機能し、塗りつぶされた後、接続が閉じられています。 –

関連する問題