Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷! Ver 2.0~

.NET은 순식간(?)에 버전업 되었습니다. 이는 신기술의 탄생도 동반했습니다 .NET 2.0 , .NET 3.0, .NET 3.5 등 새로운 기능 및 확장된 기능에 대해 다룹니다

Provider 독립적인 프로그래밍 모델 - 샘플

작성자 : 박종명
최초 작성일 : 2008-05-13 (화요일)
최종 수정일 : 2008-05-13 (화요일)
조회 수 : 2566

들어가기에 앞서>>-------------------------------------------------------------------------------------------
앞서 살펴본 ADO.NET 2.0 의 Provider에 종속되지 않는 프로그래밍 모델에 대해 살펴 보았습니다.
관련 예제를 약속하였기에 초간단, 개념적 예제를 만들어 보았습니다.
 
사실 첨엔 DB 를 직접 연동하는 것 까지 하려고 했으나 그러면 너무 '객'들이 많아 지는 듯 하여
핵심만 짚고 넘어가려 합니다.
실제 중요한 'Provider 독립 실현하기' 쯤에 해당하는 예제만을 담고 있는 샘플입니다.
 
실제 DB 연동해서 명령 실행하는 건 이전하고 동일하게 하시면 됩니다.
사실 좀 귀찮기도 하구요 ^^;
------------------------------------------------------------------------------------------------------------------
 
일단 소스 부터..

static void Main(string[] args)

        {

            string[] providerInvariantNames = new string[]{"System.Data.SqlClient",

                "System.Data.OracleClient",

                "System.Data.OleDb",

                "System.Data.Odbc"};

 

            foreach (string providerInvariantName in providerInvariantNames)

            {

                DbProviderFactory factory = DbProviderFactories.GetFactory(providerInvariantName);

                DbConnection conn = factory.CreateConnection();

                DbCommand comm = factory.CreateCommand();

                DbDataAdapter adapter = factory.CreateDataAdapter();

                DbParameter parmeter = factory.CreateParameter();

 

                Console.WriteLine(String.Format("프로바이더 문자열 : {0}", providerInvariantName));

                Console.WriteLine(factory.ToString());

                Console.WriteLine(conn.ToString());

                Console.WriteLine(comm.ToString());

                Console.WriteLine(adapter.ToString());

                Console.WriteLine(parmeter.ToString());

            }

        }


 
 
그리고 결과...




워낙 간단한 예제라 설명을 할 필요가 있을지 모르겠으나..
일단은 machine.config 에 정의된 프로바디어 중 4개에 대한 객체 생성을 알아 본다.
결과 화면에서 나타나듯이 DbProviderFactories 에 해당하는 Provider 문자열을 넘겨주면
그에 해당하는 DbProviderFactory 가 생성됨을 알 수 있다.
 
ex > System.Data.SqlClient 에 대한 Factory 로는 System.Data.SqlClient.SqlClientFactory 객체가 자동으로 생성되었다.
 
또한 이렇게 생성된 Factory 객체는 실제 DB 연동 작업을 위한 Connection,Command 등의 객체 역시 해당 Provider 에
맞는 객체를 자동 생성해 준다.
 
위 예제에서는 4개의 Provider 를 String[] 에 저장했지만 이 부분을 따로 설정 파일(Config) 에 둔다든지 하면
DB 가 변경되어도 프로그램의 변경은 최소화 할 수 있게 될 것이다.
 
이로써 'Provier 독립적인 프로그래밍'이 가능해 지는 것이다
 
 
참고로 machine.config 에 정의되어 있는 DbProviderFactories 는 다음과 같다.
 
<DbProviderFactories>
      <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <add name="SQL Server CE Data Provider" invariant="Microsoft.SqlServerCe.Client" description=".NET Framework Data Provider for Microsoft SQL Server 2005 Mobile Edition" type="Microsoft.SqlServerCe.Client.SqlCeClientFactory, Microsoft.SqlServerCe.Client, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories> 
 

이름
비밀번호
홈페이지
PT <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요