2014-07-27 5 views
1

레거시 소프트웨어와의 호환성을 위해 Access 97 또는 이전 버전과 호환되는 .mdb 데이터베이스를 만들어야합니다. Access를 설치할 수 없기 때문에 OLEDB를 사용할 수 없습니다. 또한 Office Connectivity 구성 요소를 설치하지 않으려합니다.Access 9733 데이터베이스에 대한 액세스없이 종속성 만들기

이를 수행 할 수있는 제 3 자 라이브러리가 있습니까?

+0

(http://www.microsoft.com/en-ie/download/details .aspx? id = 13255), 무료입니다. 거기에서 원하는 버전을 만들 수 있습니다 (http://msdn.microsoft.com/en-us/library/office/ff835033(v=office.15).aspx) – Fionnuala

+0

고마워요,하지만 그걸 만들 수 있어요 v3.0 이상 유형의 데이터베이스에 액세스하십시오. .CreateDatabase 호출에서 DatabaseTypeEnum.dbVersion30을 지정하면 작동합니다. 그러나 더 낮은 버전 (dbVersion20)에서는 "설치 가능한 ISAM을 찾을 수 없습니다"와 함께 호출이 실패합니다. 버전 2.0 또는 1.1 데이터베이스를 만들고 싶습니다. – LTR

+1

Deary me, 작동하는데 익숙하다는 것을 기억합니다. Jet 엔진으로이 작업을 수행 할 수 있다고 확신합니다. 2010 버전 1 또는 2로 돌아가는 것이 너무 먼 단계 일 수 있습니다. 운영 체제에 따라 Jet 엔진이있을 수 있습니다. 64 비트를 사용하면 더 복잡해집니다. – Fionnuala

답변

2

Jet 엔진이 Windows의 일부가 되었기 때문에 (Windows 2000을 MDAC 구성 요소로 사용하기 때문에) .mdb 파일을 만들려면 Access 설치가 필요하지 않습니다.

최신 .accdb 파일 (Access 2007 이상과 호환 가능)을 만들 계획 인 경우에만 ACE 드라이버를 설치해야합니다.

.mdb 데이터베이스를 만들려면 Microsoft ADO Ext. DDL 및 보안 용으로는 2.8입니다. 라이브러리 Interop.ADOX.dll.

당신은 당신이 버전은 컴퓨터로 볼 수 있습니다 어떤에서 개체 작성하는 후기 바인딩을 사용 할 수 있습니다, 직접 VS 프로젝트에서 참조 할 필요가 없습니다 :

void Main() 
{ 
    var conStr = GetConnectionString(@"C:\Users\user\Desktop\myDatabase.mdb", null, null); 
    CreateDb(conStr); 
} 

//[System.Security.SecuritySafeCritical] 
public void CreateDb(string connectionString) { 
    Type adoxType = Type.GetTypeFromProgID("ADOX.Catalog"); 
    object o = Activator.CreateInstance(adoxType); 
    o.GetType().InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] { connectionString }); 
    object connection = o.GetType().InvokeMember("ActiveConnection", BindingFlags.GetProperty, null, o, null); 
    if(connection != null) 
     connection.GetType().InvokeMember("Close", BindingFlags.InvokeMethod, null, connection, null); 
} 

public static string GetConnectionString(string database, string userid, string password) { 
    return String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Mode=Share Deny None;data source={0};user id={1};{3}password={2};", 
    database, userid, password, string.IsNullOrEmpty(password) ? string.Empty : "Jet OLEDB:Database "); 
} 

당신은을 테스트 LINQpad을 사용할 수 있습니다 코드, 그것은 내 컴퓨터에서 작동합니다.

파일을 열 수 없습니다 Microsoft Jet 데이터베이스 엔진 'C : 당신은 당신이 파일을 만들 수있는 권한이없는 폴더 데이터베이스를 만들려고하면, 당신은 같은 관련없는 COM 예외를 얻을 것이다 주 : \ myDatabase.mdb '를 입력하십시오. 이미 다른 사용자가 독점적으로 열었거나 해당 데이터를 볼 수있는 권한이 필요합니다. 등 테이블과 인덱스를 만들려면

, 당신은 Access' DDL language을 사용할 수 있으며 단순히으로 빈 데이터베이스를 제공하는 모든 코드를 피할 수 command.ExecuteNonQuery("CREATE TABLE Staff (FirstName CHAR, LastName CHAR)");

또 다른, 아마도 간단한 해결책처럼, 인 OleDB 통해 이러한 명령을 실행 귀하의 애플 리케이션과 그냥 새로운 데이터베이스가 필요할 때마다 그 중 하나를 복사하십시오.

데이터베이스를 열려면 평상시처럼 OldDb를 사용할 수 있습니다.

주의 사항 : 앱을 x86으로 명시 적으로 설정해야합니다. AnyCPU를 사용하면 32 비트 COM 구성 요소에 액세스하기 때문에 64 비트 시스템에서 문제가 발생할 수 있습니다.

기타 참조 :