C# Language
데이터베이스 액세스
수색…
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=SSPI
및 Integrated Security=True
모두 동일한 기능을 수행하지만, Integrated Security=SSPI
는 Integrated Security=true
SQLClient 및 OleDB 공급자와 함께 작동하므로 OleDb 공급자와 함께 사용할 때 예외를 throw합니다.
다른 공급자에 대한 서로 다른 연결
각 데이터 공급자 (SQL Server, MySQL, Azure 등)는 모두 연결 문자열에 대해 고유 한 구문 구문을 사용하고 다른 사용 가능한 속성을 노출합니다. ConnectionStrings.com 은 자신의 모습이 확실하지 않은 경우 매우 유용한 리소스입니다.