문제

배경:

C# 응용 프로그램은 여러 유형의 데이터베이스 (Oracle, SQL Server, MySQL)에 쿼리를 생성하고 실행하지만 독점 파일 형식에도 적용해야합니다.

  1. 지금까지 사용되는 네임 스페이스는 System.Data.common입니다.
  2. 우리가 적용 해야하는 쿼리는 사소한 일입니다 (중첩 선택, 별명, 서브 스트링 메소드 및 문자열 연결)

우리는 처음에 독점 파일의 내용을 CSV로 변환했습니다. {Microsoft 텍스트 드라이버 ( *.txt; *.csv)}. 그러나 클라이언트는 임시 파일이 생성되지 않아야했으며 모든 것이 메모리에서 발생해야합니다.

파일을 직접 쿼리하기 위해 ODBC 드라이버를 작성하는 것은 너무 시간이 많이 걸리는 것 같습니다. 따라서 우리는 드라이버 (아마도 ODBC)를 만드는 것을 고려하고 있으며, 여기서 SQLITE ODBC 드라이버를 "내부"할 것입니다. 해당 드라이버 내부에서는 "Memory"데이터베이스에 CSV 파일의 내용을로드 한 다음 쿼리를 내부 ODBC 드라이버로 전달할 수 있습니다.

내 질문 :

  1. 이 솔루션은 실현 가능해 보입니까?
  2. 처음부터 ODBC 드라이버를 만들려면 어디에서 시작해야합니까?

감사

도움이 되었습니까?

해결책

SQLITE를 백엔드로 사용하는 경우 가능성이있는 경우 실제로 SQLITE 데이터베이스에 ADO .NET 제공 업체를 사용할 수없는 이유를 알 수 없습니다. System.data.sqlite.


귀하의 의견에서, 귀하는 모든 데이터베이스 연결 (System.Data.ODBC)에 ODBC ADO .NET 제공자를 사용하고 있다고 생각합니다. 동일한 체계를 유지해야한다면, 맞춤형 ODBC 제공 업체는 갈 길입니다 (그러나 그것은 평범한 C 기본 개발이며 다소 고통 스럽습니다).

또 다른 방법은 DB에 세 번째 매개 변수를 추가하는 것입니다 (첫 번째 두 개는 SQL과 연결 문자열)입니다. 구성 파일에서 수행해야합니다, 참조 providerName 기인하다). 이렇게하면 사용 가능한 ADO .NET 제공 업체를 사용할 수 있습니다.

그런 다음 SQLITE 제공 업체를 SQLITE DB의 생성 및 인구를 포함 할 수있는 자신의 Custom, Ado .NET 제공 업체로 SQLITE 제공 업체를 포장 할 수 있습니다. 이 솔루션의 장점 : Pure Managed .NET.

다른 팁

클라이언트 요청은 홀수입니다. 항상 관련 파일이 있고 파일에서 읽고 있습니다.

그들이 메모리에 물건을 원한다면 (다시 이상한 고객) CSV를 RAM 디스크에 넣습니다.http://members.fortmercity.com/ramdisk/ramdisk/ramdriv001.htm

Building and ODBC Drive는 성능과 안정성에 관심이있는 경우 비 치명적인 사업입니다.

솔루션이 시간이 많이 걸린다고 생각합니다. 당신이하려는 일에 대한 기존 솔루션을 찾을 수 있습니다. 다음은 몇 가지 대안입니다.

LINQ를 텍스트/CSV 파일로 시도해보십시오.

두 솔루션 모두 메모리에 있습니다.

또 다른 아이디어는 CSV 나 텍스트 대신 XML로 파일을 내보낼 수 있다는 것입니다 (코드에서 처리해야 할 때 항상 XML로 내보내기를 선호합니다). System.XML 또는 LINQ에서 XML을 사용하는 것보다 작업을 수행합니다.

임시 파일을 생성하지 않도록 제한된 경우 SQLITE의 메모리 모드를 사용하려고 시도 할 수 있습니다. 다음은 연결 문자열 샘플입니다 (원천):

Data Source=:memory:;Version=3;New=True;

내 마음에 이것은 본격적인 공급자를 구축하는 것보다 간단합니다. $

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