Interop 어셈블리없이 Microsoft Jet (Access) 데이터베이스를 어떻게 작성합니까?

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

  •  03-07-2019
  •  | 
  •  

문제

ADOX Interop 어셈블리를 사용하지 않고 Access (MDB) 데이터베이스를 작성해야합니다.

이 작업은 어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

이 코드를 버리기 전에 stackoverflow에서도 살 수 있습니다.

이 라인을 따라 무언가가 트릭을하는 것 같습니다.

if (!File.Exists(DB_FILENAME))
{
    var cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB_FILENAME;

    // Use a late bound COM object to create a new catalog. This is so we avoid an interop assembly. 
    var catType = Type.GetTypeFromProgID("ADOX.Catalog");
    object o = Activator.CreateInstance(catType);
    catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] {cnnStr});

    OleDbConnection cnn = new OleDbConnection(cnnStr);
    cnn.Open();
    var cmd = cnn.CreateCommand();
    cmd.CommandText = "CREATE TABLE VideoPosition (filename TEXT , pos LONG)";
    cmd.ExecuteNonQuery();

}

이 코드는 adox.catalog com 구성 요소로 생성되면 OLEDBCONNECTION을 사용하여 데이터베이스에 액세스 할 수 있음을 보여줍니다.

다른 팁

Autsin과 동일한 작업을 수행하고 액세스 DB를 작성한 다음 관리 자원으로 내 프로젝트에 포함 시켰습니다. 일단 거기에 있으면 컴파일 된 코드에 포함되며 원하는만큼 하드 디스크에 복사 할 수 있습니다. 빈 데이터베이스도 비교적 작으므로 오버 헤드가 많지 않습니다.

추가 보너스는 데이터베이스를 사용하는 방법이나 매번 추가 할 테이블을 알고 있다면 데이터베이스를 설정하는 기능입니다. 코딩 양과 느린 데이터베이스 쿼리를 줄일 수 있습니다.

.NET 3.5 에서이 연결 문자열을 사용하는 경우 제트 (주요 두통)가 설치되지 않아도됩니다.

Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\myFolder\myAccess2007file.accdb;Persist
Security Info=False;

이것은 Access 2007 이하에서 작동해야합니다

흥미로운 질문 - 나는 이런 식으로 즉시 하나를 만들겠다고 생각한 적이 없습니다. 나는 항상 내 기준 데이터베이스를 프로젝트의 리소스로 포함 시켰으며 새로운 데이터베이스가 필요할 때 사본을 만들었습니다.

에이스 아니다 어떤 프레임 워크에서 (아직. 즉, 1, 2, 3.5, 4, 4.5에 있지 않음)

또한 Windows 업데이트의 일부가 아닙니다.

제트 4 ~이다 프레임 워크 2 이상.

Access/MDB 파일 등으로 작업하는 경우 ACE가 존재한다고 가정하지 마십시오.

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