ADOX 相互運用アセンブリを使用せずにアクセス (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 と同じことを行い、Access db を作成してから、管理対象リソースとしてプロジェクトに含めました。そこにあると、それはコンパイルされたコードに含まれ、必要な回数だけハードディスクにコピーできます。空のデータベースも比較的小さいため、オーバーヘッドはあまりありません。
追加のボーナスは、データベースがどのように使用されるか、または毎回どのテーブルが追加されるかを知っていれば、データベースをセットアップする機能です。コーディングの量を減らし、データベースクエリを遅くすることができます.
.net 3.5 でこの接続文字列を使用する場合、Jet (大きな頭痛の種) をインストールする必要はありません。
Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\myFolder\myAccess2007file.accdb;Persist
Security Info=False;
これは Access 2007 以下で動作するはずです
興味深い質問です。このようにオンザフライで作成することは考えたことがありません。私は常にベースライン データベースをリソースとしてプロジェクトに含め、新しいデータベースが必要になったときにコピーを作成しました。