爲了與舊版軟件兼容,我需要創建與Access 97或更早版本兼容的.mdb數據庫。我不能使用OLEDB,因爲我不能依靠Access來安裝。我也不想安裝Office連接組件。在不依賴Access的情況下創建Access 97數據庫
是否有任何第三方庫可以做到這一點?
爲了與舊版軟件兼容,我需要創建與Access 97或更早版本兼容的.mdb數據庫。我不能使用OLEDB,因爲我不能依靠Access來安裝。我也不想安裝Office連接組件。在不依賴Access的情況下創建Access 97數據庫
是否有任何第三方庫可以做到這一點?
您不需要安裝Access來創建.mdb
文件,因爲Jet引擎永遠是Windows的一部分(因爲Windows 2000是MDAC組件的一部分)。
只有在計劃創建較新的.accdb
文件(與Access 2007及更高版本兼容)時,才需要安裝ACE驅動程序。
若要創建一個空的.mdb
數據庫,您需要使用Microsoft ADO分機。 2.8 DDL和安全庫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測試代碼,它適用於我的機器。 請注意,如果您嘗試創建文件夾中的數據庫,你不必創建文件的權利,你會得到這樣一個不相關的COM異常:
Microsoft Jet數據庫引擎無法打開文件「C :\了MyDatabase.mdb」。它已經由另一個用戶專門打開,或者您需要查看其數據的權限。
要創建表和索引,等等,你可以使用Access' DDL language並通過OLEDB執行這些命令,像command.ExecuteNonQuery("CREATE TABLE Staff (FirstName CHAR, LastName CHAR)");
另一個,可能是更簡單的解決方案,能夠避免所有這些代碼是簡單地運送一個空數據庫你的應用程序,只需要複製一個,只要你需要一個新的數據庫。
要打開數據庫,您可以像往常一樣使用OldDb。
要小心的事情:確保你的應用程序的目標明確地設置爲x86;使用AnyCPU可能會讓您在64位機器上遇到麻煩,因爲您正在訪問32位COM組件。
其他參考資料:
你有對MS Access引擎是什麼(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
謝謝,但只有創建它纔有可能訪問v3.0及更高版本類型的數據庫。當我在.CreateDatabase調用中指定DatabaseTypeEnum.dbVersion30時,它可以工作。但是,對於任何較低版本(dbVersion20),調用會失敗,並顯示「找不到可安裝的ISAM」。我想創建版本2.0或1.1數據庫。 – LTR
Deary me,我記得它曾經工作過,我相當肯定你可以用Jet引擎做這件事,從2010年回到版本1或2可能會有點過頭。您可能擁有Jet引擎,具體取決於您的操作系統。如果你在64位上,它會變得更加複雜。 – Fionnuala