5

ADOX 相互運用アセンブリを使用せずにアクセス (mdb) データベースを作成する必要があります。

これはどのように行うことができますか?

4

5 に答える 5

11

このコードを破棄する前に、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 を使用してデータベースにアクセスできることを示しています。

于 2008-10-01T01:31:50.780 に答える
1

私は Autsin と同じことを行い、Access db を作成してから、管理対象リソースとしてプロジェクトに含めました。そこにあると、それはコンパイルされたコードに含まれ、必要な回数だけハードディスクにコピーできます。空のデータベースも比較的小さいため、オーバーヘッドはあまりありません。

追加のボーナスは、データベースがどのように使用されるか、または毎回どのテーブルが追加されるかを知っていれば、データベースをセットアップする機能です。コーディングの量を減らし、データベースクエリを遅くすることができます.

于 2008-10-01T03:36:34.067 に答える
0

.net 3.5 でこの接続文字列を使用する場合、Jet (大きな頭痛の種) をインストールする必要はありません。

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

これは Access 2007 以下で動作するはずです

于 2008-10-01T01:41:14.673 に答える
0

興味深い質問です。このようにオンザフライで作成することは考えたことがありません。私は常にベースライン データベースをリソースとしてプロジェクトに含め、新しいデータベースが必要になったときにコピーを作成しました。

于 2008-10-01T02:08:28.867 に答える