C# Language 문과 데이터베이스 연결 사용


using 키워드는 명령문 내에 정의 된 자원이 명령문 자체의 범위 내에 만 존재하도록합니다. 명령문 내에 정의 된 모든 자원은 IDisposable 인터페이스를 구현해야합니다.

이 연결은 IDisposable 인터페이스를 구현하는 모든 연결을 처리 할 때 매우 중요합니다. 연결이 올바르게 닫히지 만 using 문이 범위 using 벗어난 후에 해당 리소스가 해제되도록 보장하기 때문입니다.

일반적인 IDisposable 데이터 클래스

다음은 IDisposable 인터페이스를 구현하고 using 문을 using 하기에 가장 적합한 데이터 관련 클래스입니다.

  • SqlConnection , SqlCommand , SqlDataReader
  • OleDbConnection , OleDbCommand , OleDbDataReader
  • MySqlConnection , MySqlCommand , MySqlDbDataReader
  • DbContext

이 모든 것은 일반적으로 C #을 통해 데이터에 액세스하는 데 사용되며 일반적으로 데이터 중심 응용 프로그램 구축 과정에서 발생합니다. 동일한 FooConnection , FooCommand , FooDataReader 클래스를 구현하는 언급되지 않은 다른 많은 클래스도 동일한 방식으로 동작해야합니다.

ADO.NET 연결에 대한 일반적인 액세스 패턴

ADO.NET 연결을 통해 데이터에 액세스 할 때 사용할 수있는 일반적인 패턴은 다음과 같습니다.

// This scopes the connection (your specific class may vary)
using(var connection = new SqlConnection("{your-connection-string}")
{
    // Build your query
    var query = "SELECT * FROM YourTable WHERE Property = @property");
    // Scope your command to execute
    using(var command = new SqlCommand(query, connection))
    {
         // Open your connection
         connection.Open();

         // Add your parameters here if necessary

         // Execute your query as a reader (again scoped with a using statement)
         using(var reader = command.ExecuteReader())
         {
               // Iterate through your results here
         }
    }
}

또는 단순한 업데이트를 수행하면서 독자가 필요하지 않은 경우에도 동일한 기본 개념이 적용됩니다.

using(var connection = new SqlConnection("{your-connection-string}"))
{
     var query = "UPDATE YourTable SET Property = Value WHERE Foo = @foo";
     using(var command = new SqlCommand(query,connection))
     {
          connection.Open();
          
          // Add parameters here
          
          // Perform your update
          command.ExecuteNonQuery();
     }
}

DataContext와 함께 문 사용

Entity Framework와 같은 많은 ORM은 기본 데이터베이스와 상호 작용하는 데 사용되는 추상화 클래스를 DbContext 와 같은 클래스 형태로 DbContext 합니다. 이러한 컨텍스트는 일반적으로 IDisposable 인터페이스도 구현하며 가능한 경우 명령문을 using 이를 활용해야합니다.

using(var context = new YourDbContext())
{
      // Access your context and perform your query
      var data = context.Widgets.ToList();
}