수색…


ADO.NET 연결

ADO.NET 연결은 C # 응용 프로그램에서 데이터베이스에 연결하는 가장 간단한 방법 중 하나입니다. 그들은 쿼리를 수행하기 위해 데이터베이스를 가리키는 공급자 및 연결 문자열의 사용에 의존합니다.

공통 데이터 공급자 클래스

다음은 데이터베이스 및 관련 네임 스페이스를 쿼리하는 데 일반적으로 사용되는 클래스입니다.

  • System.Data.SqlClient SqlConnection , SqlCommand , SqlDataReader
  • OleDbConnection , OleDbCommand , System.Data.OleDb OleDbDataReader
  • MySqlConnection , MySqlCommand , MySqlDbDataReader 에서 MySql.Data

이 모든 것은 일반적으로 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();
     }
}

공통 인터페이스 집합을 기준으로 프로그램 할 수도 있고 공급자 별 클래스에 대해 걱정할 필요가 없습니다. ADO.NET에서 제공하는 핵심 인터페이스는 다음과 같습니다.

  • IDbConnection - 데이터베이스 연결 관리 용
  • IDbCommand - SQL 명령 실행 용
  • IDbTransaction - 트랜잭션 관리 용
  • IDataReader - 명령에 의해 반환 된 데이터 읽기
  • IDataAdapter - 데이터 집합과 데이터를주고 받기위한 것
var connectionString = "{your-connection-string}";
var providerName = "{System.Data.SqlClient}"; //for Oracle use "Oracle.ManagedDataAccess.Client"
//most likely you will get the above two from ConnectionStringSettings object

var factory = DbProviderFactories.GetFactory(providerName);

using(var connection = new factory.CreateConnection()) {
    connection.ConnectionString = connectionString;
    connection.Open();

    using(var command = new connection.CreateCommand()) {
        command.CommandText = "{sql-query}";    //this needs to be tailored for each database system

        using(var reader = command.ExecuteReader()) {
            while(reader.Read()) {
                ...
            }
        }
    }
}

엔티티 프레임 워크 연결

Entity Framework는 DbContext 와 같은 클래스 형식으로 기본 데이터베이스와 상호 작용하는 데 사용되는 추상화 클래스를 제공합니다. 이러한 컨텍스트는 일반적으로 쿼리 할 수있는 사용 가능한 컬렉션을 표시하는 DbSet<T> 속성으로 구성됩니다.

public class ExampleContext: DbContext 
{ 
    public virtual DbSet<Widgets> Widgets { get; set; } 
}

DbContext 자체는 데이터베이스 연결을 처리하며 일반적으로 구성에서 적절한 연결 문자열 데이터를 읽어 연결 설정 방법을 결정합니다.

public class ExampleContext: DbContext 
{ 
    // The parameter being passed in to the base constructor indicates the name of the 
    // connection string
    public ExampleContext() : base("ExampleContextEntities")
    {
    }

    public virtual DbSet<Widgets> Widgets { get; set; } 
}

Entity Framework 쿼리 실행

실제로 Entity Framework 쿼리를 실행하는 것은 매우 쉽고 간단히 컨텍스트의 인스턴스를 만든 다음이 컨텍스트의 사용 가능한 속성을 사용하여 데이터를 가져 오거나 액세스해야합니다

using(var context = new ExampleContext())
{
      // Retrieve all of the Widgets in your database
      var data = context.Widgets.ToList();
}

또한 Entity Framework는 SaveChanges() 메서드를 호출하여 변경 내용을 데이터베이스에 푸시하기 만하면 데이터베이스의 항목 업데이트를 처리하는 데 사용할 수있는 광범위한 변경 내용 추적 시스템을 제공합니다.

using(var context = new ExampleContext())
{
      // Grab the widget you wish to update
      var widget = context.Widgets.Find(w => w.Id == id);
      // If it exists, update it
      if(widget != null)
      {
           // Update your widget and save your changes
           widget.Updated = DateTime.UtcNow;
           context.SaveChanges();
      }
}

연결 문자열

연결 문자열은 특정 데이터 소스에 대한 정보와 자격 증명, 위치 및 기타 정보를 저장하여 연결하는 방법을 지정하는 문자열입니다.

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;

연결 문자열 저장

일반적으로 연결 문자열은 구성 파일 (예 : ASP.NET 응용 프로그램의 app.config 또는 web.config )에 저장됩니다. 다음은 이러한 파일 중 하나에서 로컬 연결이 어떻게 표시되는지를 보여주는 예입니다.

<connectionStrings> 
   <add name="WidgetsContext" providerName="System.Data.SqlClient"  connectionString="Server=.\SQLEXPRESS;Database=Widgets;Integrated Security=True;"/> 
</connectionStrings>

<connectionStrings> 
   <add name="WidgetsContext" providerName="System.Data.SqlClient"  connectionString="Server=.\SQLEXPRESS;Database=Widgets;Integrated Security=SSPI;"/> 
</connectionStrings>

이렇게하면 응용 프로그램이 WidgetsContext 통해 프로그래밍 방식으로 연결 문자열에 액세스 할 수 있습니다. Integrated Security=SSPIIntegrated Security=True 모두 동일한 기능을 수행하지만, Integrated Security=SSPIIntegrated Security=true SQLClient 및 OleDB 공급자와 함께 작동하므로 OleDb 공급자와 함께 사용할 때 예외를 throw합니다.

다른 공급자에 대한 서로 다른 연결

각 데이터 공급자 (SQL Server, MySQL, Azure 등)는 모두 연결 문자열에 대해 고유 한 구문 구문을 사용하고 다른 사용 가능한 속성을 노출합니다. ConnectionStrings.com 은 자신의 모습이 확실하지 않은 경우 매우 유용한 리소스입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow