2016년 12월 29일 목요일

[닷넷교육,C#교육,실무교육학원추천_탑크리에듀]ADO.NET DataBase 연결(DB Connection)3 - OleDbConnection 클래스

ADO.NET DataBase 연결(DB Connection)3 - OleDbConnection 클래스

OleDbConnection 개체는 데이터 소스(데이터베이스)와 고유한 연결을 나타내며, 클라이언트/서버 데이터베이스 시스템에서는 서버에 대한 네트워크 연결에 해당한다.
 
네이티브 OLE DB 공급자(MS-SQL외 기타 데이터베이스)가 지원하는 기능에 따라 OleDbConnection 개체의 일부 메서드나 속성을 사용할 수 없다.
 
하나의 OleDbConnection에 두 개 이상의 DataReader를 열 수 있다.
 
멀티 유저가 사용하는 응용 프로그램을 배포하려면 대부분 연결 풀링(DataBase Connection Pooling)을 사용해야 하는데  .NET Framework Data Provider for OLE DB의 경우, 공급자가 이를 자동으로 관리하기 때문에 연결 풀링을 사용할 필요가 없다.
 
다음은 .NET Framework 4.0 OleDbConnection 클래스의 생성자 이다.

[OleDbConnection Constructor]
 
 public sealed class OleDbConnection : DbConnection, 
 ICloneable, IDbConnection, IDisposable
OleDbConnection() : OleDbConnection 클래스의 새 인스턴스를 초기화한다.
OleDbConnection(String) : 지정된 연결 문자열을 사용하여 OleDbConnection 클래스의 새 인스턴스를 초기화한다.

[OleDbConnection Public Property]
 
- ConnectionString : 데이터베이스를 OPEN하는 데 사용되는 문자열을 가져오거나 설정. (DbConnection.ConnectionString을(를) 재정의) 
OleDbConnection cn=new OleDbConnection();
cn.ConnectionString = 
 "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger" ;
cn.Open();

- ConnectionTimeout : 연결 시도를 취소하거나 에러를 내기 전까지, Open() 메쏘드(Method)가 기다리는 시간(초). 
OleDbConnection cn=new OleDbConnection();
cn.ConnectionString = 
 "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger" ;
cn.ConnectionTimeout);

- Database : 현재 데이터베이스 이름이나 커넥션(Connection)이 열렸을 때 사용되는 데이터베이스 이름을 담고 있는 프로퍼티(Property) 리턴. public void CreateOleDbConnection()
string conStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger";
                conn = new OleDbConnection(conStr);
                conn.Open();   MessageBox.Show("ServerVersion: " + myConnection.ServerVersion + "\nDatabase: " + cn.Database.ToString());
   cn.Close();
}

- DataSource : 데이터가 위치하고 있는 머신 이름, 혹은 파일 패스(path)와 이름.
 
(DbConnection.DataSource을(를) 재정의함) 
[Access DB]
"Data Source=C:\onj.mdb;"
[SQL Server]
"Data Source=localhost;"

- Provider : 제공자(Provider) 이름. 디폴트 값이 없으며, 연결이 되기 위해 반드시 지정해야 함.
 
[OleDbConnection Connection Parameter: Provider] 참조. 연결 문자열의 "Provider= " 절에 지정된 OLE DB 공급자 이름을 가져옵니다. 
string conStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger";
                conn = new OleDbConnection(conStr);
                conn.Open();
Console.WriteLine("{0}", cn.Providor);
 
- State : 현재 연결상태(Connection State)를 나타내는 프로퍼티(Property) 표시. (Read-Only)
string conStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger";
                conn = new OleDbConnection(conStr);
                conn.Open();

cn.Close();
if(cn.State == ConnectionState.Closed)
{
   ..do something..
}
 
ConnectionString에 관해서 좀 더 살펴보면, 대략 다음과 같은 파라미터(Parameter)들을 볼 수 있다.

[OleDbConnection Parameters]
 
- Provider : OLE DB 데이터 제공자(Data Provider)의 이름. SqlConnection에서는 사용 하지 않음.
- Data Source or DSN : 데이터 소스 이름(Data Source Name; DSN). 통상 파일 이름, 혹은 컴퓨터 이름
오라클인경우 DB이름. Tnsnames.ora에 정의된 접속하고자 하는 오라클의 이름
- User ID : User Identification 이름.
- Password : Password.
- Mode 1 = Read only
2 = Write
3 = Read / Write
4 = (Lock) 다른 사용자는 Read로 열 수 없음.
8 = (Lock) 다른 사용자는 Write로 열 수 없음.
12 = (Lock) 다른 사용자는 Read나 Write로 열 수 없음.
16 = 다른 사용자에게 Access 허용.
- ConnectionTimeout : 연결 시도를 취소하거나 에러를 내기 전까지, Open() 메쏘드(Method)가 기다리는 시간(초).
- Initial Catalog or DBQ : 데이터베이스(Database), 혹은 파일 이름.
- Packet Size : 주고 받을 네트웍 패킷(Packet) 크기.
- Workstation ID or WSID : 클라이언트의 웍스테이션(workstation) 이름.

[OleDbConnection Connection Parameter: Provider]
 
- Server 2000, 7.0  Or earlier 
 
Provider = sqloledb;
Data Source = SqlServer_Name;
Initial Catalog = Northwind;
User Id = User_Name; Password = Pass;
 
- Oracle Provider = MSDAORA;
Data Source = DB_Name;
User Id = User_Name; Password = Pass;
Simple Provider Provider = MSDAOSP;
Data Source = Server_Name;
 
[OleDbConnection Public Method]
 
- BeginTransaction : 특정 데이터 소스(Data Source)에서 SQL Transaction 객체를 생성. 
 
public void ExecuteTransaction(string connectionString)
{
    using (OleDbConnection connection =
               new OleDbConnection(connectionString))
    {
        OleDbCommand command = new OleDbCommand();
        OleDbTransaction transaction = null;
        // Set the Connection to the new OleDbConnection.
        command.Connection = connection;
        // Open the connection and execute the transaction.
        try
        {
            connection.Open();
            // Start a local transaction
            transaction = connection.BeginTransaction();
            // Assign transaction object for a pending local transaction.
            command.Connection = connection;
            command.Transaction = transaction;
            // Execute the commands.
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
            command.ExecuteNonQuery();
            command.CommandText =
                "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
            command.ExecuteNonQuery();
            // Commit the transaction.
            transaction.Commit();
            Console.WriteLine("Both records are written to database.");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            try
            {
                // Attempt to roll back the transaction.
                transaction.Rollback();
            }
            catch
            {
                // Do nothing here; transaction is not active.
            }
        }
        // The connection is automatically closed when the
        // code exits the using block.
    }
}
 
 
- BeginTransaction (IsolationLevel): 지정된 격리 수준으로 데이터베이스 트랜잭션을 시작 
 
 
System.Data.IsolationLevel 값
ReadUncommitted : 다른 Commit되지 않은 트랜잭션에 의해 변경된 데이터를 볼 수 있다. 
거의 트랜잭션의 기능을 수행하지 않는다.
ReadCommitted : 데이터베이스 디폴트 지원 격리 레벨. 다른 트랜잭션에 의해 Commit되지 않은 데이터는 다른 트랜잭션에서 볼 수 없다.
RepeatableRead : 다른 트랜잭션이 새로운 데이터를 입력했다면 볼 수 있다. 
트랜잭션이 완료 될때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에대한 수정이 불가능하다
Serializable : 하나의 트랜잭션이 완료된 후에 다른 트랜잭션이 실행하는 것처럼 지원한다.
동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행 될 수 없다. 범위 잠금을 DataSet에 적용하여 트랜잭션이 완료될 때까지 다른 사용자가 데이터 집합에 행을 삽입하거나 업데이트할 수 없게 한다.
Snapshot : 동일한 데이터에 대해 한 응용 프로그램에서 데이터를 수정하고 있을 때 또 다른 응용 프로그램에서 읽을 수 있는 데이터 버전을 저장하여 차단을 줄입니다. 다시 쿼리해도 한 트랜잭션에서 다른 트랜잭션의 변경 내용을 볼 수 없음을 나타낸다.

- ChangeDatabase : 현재 연결된 데이터베이스를 요청된 데이터베이스로 전환.
 
string cnString=
    "Provider=SQLOLEDB;" +
    "Data Source=localhost;" +
    "Initial Catalog=pubs;";
OleDbConnection cn=
new OleDbConnection(cnString);
cn.Open();
 .. 
cn.ChangeDatabase("OnJDB");
 
- Close : 연결(Connection)을 닫고, 연관된 모든 자원(resources)을 시스템에 반환. 

- CreateCommand : 해당 연결 객체(Connection Object)를 대상으로 OleDbCommand 객체를 생성함. 
cn.Open();
OleDbCommand cmd=cn.CreateCommand();

- GetOleDbSchemaTable : Guid 타입의 스키마(Schema) 파라미터(Parameter)와 object[] 타입의 열(Column) 제한자(Restrictions)를 취해 요청된 스키마(Schema) 정보를 추출. 
string conStr = "Provider=MSDAORA;data source=onj;User ID=scott;Password=tiger";
                conn = new OleDbConnection(conStr);
                conn.Open();
DataTable dt=
cn.GetOleDbSchemaTable (OleDbSchemaGuid.Indexes, null);
 
- Open : 커넥션 스트링(Connection String)에 정의된 데이터베이스를 열리게 함. 
OleDbConnection cn=
new OleDbConnection(cnString);
cn.Open();

- ResetState: OleDbConnection 개체의 State 속성을 업데이트. 
System.Data.ConnectionState
Closed, Open, Connecting, Executing, Fetching, Broken

- ReleaseObjectPool : 마지막 연결이 닫히면, 커넥션 오브젝트 풀(Connection Object Pool)이 제거됨. 
OleDbConnection cn=new OleDbConnection(
     "Data Source=c:\students.mdb;" 
+ "Provider=Microsoft.Jet.OLEDB.4.0;";
cn.Open();
cn.Close();
OleDbConnection.RelaeaseObjectPool();

[OleDbConnection Public Event]
 
Disposed : Dispose 메서드를 호출하여 구성 요소가 삭제되는 경우 발생
InfoMessage : 공급자가 경고나 정보 메시지를 보내면 발생
StateChange : 연결 상태(Connection State) 변화가 생겼을 때 발생.
 

댓글 없음:

댓글 쓰기