언제 ODBC, OLEDB, SQLCLIENT를 사용해야합니까? 트레이드 오프는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/937083

문제

SQLServer 데이터베이스로 시작하고 있습니다. 그래서 내가 사용해야하는 것 같습니다 System.Data.SqlClient 네임 스페이스. 그러나 SQLServer 데이터베이스를 종료하고 MySQL 또는 Oracle로 이동할 가능성이 있습니다. 이러한 이유로, 우리의 .NET 앱이 데이터베이스와 통신하는 방법에 대한 일련의 표준을 제시하여, 우리가 필요로하는 경우 향후 다른 데이터베이스 시스템으로 쉽게 마이그레이션 할 수 있도록합니다.

표준은 다음과 같습니다.

  1. 가능한 경우 ORM을 사용하십시오 (예 : NHibernate) (SQLServer 만 지원하므로 LINQ 없음이지만 엔티티 프레임 워크 및 Oracle 및 MySQL에 대한 지원은 어떻습니까?)
  2. ORM이 오버 킬인 인 경우 매개 변수화 된 SQL 쿼리를 사용하십시오.
  3. 데이터베이스에서 수행 해야하는 장기적 인 또는 복잡한 작업에 대해서만 저장된 절차를 사용하십시오.

내게 나를 데려옵니다 당면한 주요 질문. DAL을 코딩하기 위해 어떤 네임 스페이스를 사용해야합니까?

선택이 그 사이에있는 것 같습니다 System.Data.ODBC 그리고 System.Data.OleDB:

  • 트레이드 오프는 무엇입니까?
  • 하나는 다른 하나보다 선호됩니까?
  • 첫 3 표준에 대한 당신의 생각은 무엇입니까?
도움이 되었습니까?

해결책

System.data.sqlclient

SQL Server 2000 이상에만 연결되지만 해당 데이터베이스에 연결할 때 최적의 성능을 얻을 수 있습니다.

System.data.oledbclient

SQL 6.5에 연결합니다

OLEDBCLIENT는 Oracle 또는 Access와 같은 다른 데이터베이스에 연결할 수 있습니다. 그러나 SQL Server를 사용하려면 SQLClient를 사용하여 더 나은 성능을 얻게됩니다.

참고 : Oracle에 연결하기 위해 Microsoft에는 OracleClient도 있습니다.

System.data.odbcclient

ODBC 드라이버를 사용하여 레거시 데이터베이스에만 연결됩니다. (예 : MS Access 97.)

원래 소스

다른 팁

SQL Server 드라이버를 사용하려고합니다. 나는 당신이하려는 일을 이해하지만 여러 데이터베이스를 지원하는 방법은 다른 추상화 계층을 삽입하는 것입니다. 여러 가지 방법으로 할 수 있습니다. 그러나 클래스 계층 구조의 가장자리에 데이터베이스 별 코드를 넣습니다. 따라서 각 클래스는 데이터베이스 별 기능의 이점을 얻을 수 있지만 높은 수준의 발신자는 아래에 어떤 데이터베이스가 사용되고 있는지 알지 못합니다. orms까지, 나는 선호한다 llblgen, 그러나 이것은 단지 나의 선호도입니다.

또한 명확히하기 위해 LINQ는 SQL Server에만 국한되지 않습니다. 그것은 linq-to-sql입니다. LINQ는 LINQ-to-SQL, LINQ-to-ENTITIES, LINQ-TO-OBJECTS 및 LLBLGEN조차 LINQ를 지원할 수있는 쿼리 기술입니다.

현재 SQLClient 또는 ODBC를 사용하든, 현재 저장된 프로 시저 또는 기타 데이터베이스 별 기능을 사용하는 경우 데이터베이스 엔진을 변경하면이를 다시 작성해야합니다.

나는 단지 sqlclient를 사용하고 DAL이 변경되면 DAL을 다시 작성/재생산합니다.

지금 여러 플랫폼에서 구현하고 테스트하지 않는 한 지금은 추가 노력이 DAL을 다시 실행하려는 노력보다 큰 일이거나 DAL을 가지고 있다는 사실을 확신하지 못합니다. 결국 당신은 어쨌든 나중에 변화를 위해 한 곳에 모든 것을 가지고 있음을 의미합니다.

데이터베이스를 바꾸는 잉크가 있다면 (또는 여러 백엔드를 지원하는) ORM이 갈 길입니다. 그렇지 않으면 변경 사항을 지원하기 위해 여전히 많은 DAL을 리팩터/다시 작성해야합니다. 앱이 작 으면 나쁘지는 않지만 실질적으로 아프게 될 것입니다.

SQL Server를 사용하면 SQLClient가 OLEDB 및 ODBC보다 훨씬 빠르고 개발하기 쉽다는 것을 알게 될 것입니다. 여러 플랫폼을 지원해야 할 가능성이 높지 않으면 이점이 다시 작성 해야하는 위험보다 더 중요하다는 것을 알게됩니다. 당신의 달.

또한 OLEDB / ODBC를 사용하는 것은 플랫폼 독립성을 유지하는 1 가지 방법 일뿐입니다. 각각 사용중인 플랫폼에 기본 클라이언트를 사용하여 DAL을 여러 번 구현하는 것이 더 효과적 일 수 있습니다.

핵심 기능이 아니라면 플랫폼 독립성을 유지하는 것에 대해 너무 걱정하지 않아야한다고 들었습니다. 즉,

sqlclient는 당신에게 기본 액세스를 제공하며 더 성능이 있어야합니다 (추상화/번역을 수행 할 필요는 없습니다).

OLEDB가 작동하기 위해 변경해야 할 유일한 것은 ODBC입니다. OLEDB는 더 많은 클라이언트 측 인텔리전스를 보유하고 있으므로 더 나은 성능을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top