2009年3月26日 星期四

如何由程式中去新增 ODBC 資料來源

如何由程式中去新增 ODBC 資料來源
ODBC ( Open Database Connectivity ) 為 開放式的資料連結介面
早期是資料庫連結的標準,應用的技術有ODBC API、ODBC Direct ..
或是使用 資料庫物件 透過ODBC Driver 去進行資料庫的存取。
而後,M$ 推OLEDB ,資料庫物件也由 ADO 進化到 ADO.Net。
但不變的是,從文字檔 txt、csv、html,試算表xls、wks,到檔案型的DB,
XBase 的 DBF、Access 的 MDB等,甚至是 SQL Server , Oracle 等
中大型的DBMS、RDBMS,各廠商依舊提供了該資料庫系統的原廠 ODBC 驅動程式。
也因此,時至今日,ODBC 依舊被廣泛的使用。
而底下將介紹 如何由程式中去進增一個 MDB 的 ODBC 資料來源
其他資料庫原理亦相同,依樣畫葫蘆即可。
<< VB.Net 寫法 >>
' 宣告變數
Dim Para(11), DSN, Driver As String
' 設定ODBC DSN 參數內容
Para(0) = "UID=admin"
Para(1) = "Database=C:\db1.mdb"
Para(2) = "UserCommitSync=Yes"
Para(3) = "Threads=3"
Para(4) = "SafeTransactions=0"
Para(5) = "PageTimeout=5"
Para(6) = "MaxScanRows=8"
Para(7) = "MaxBufferSize=2048"
Para(8) = "FIL=MS Access"
Para(9) = "DriverId=25"
Para(10) = "DefaultDir=C:\"
Para(11) = "DBQ=C:\db1.mdb"
' 使用者資料來源名稱
DSN = "MyDataSourceName"
' 驅動程式
Driver = "Microsoft Access Driver (*.mdb)"
' 建立DAO.DBEngine 物件 , 透過RegisterDatabase 方法新增一個ODBC 設定
CreateObject("DAO.DBEngine.36").RegisterDatabase(DSN, Driver, True, Join(Para, Chr(0)))
' DAO 物件: Microsoft DAO 3.6 Object Library ( dao360.dll )
================================================================
<< C# 寫法 >>
// Activator 成員: 包含本機或遠端建立物件型別的方法,或者取得對現有遠端物件的參考。
// Activator.CreateInstance 方法(Type) : 使用最符合指定參數的建構函式,建立指定型別的執行個體。
object dbe = Activator.CreateInstance(Type.GetTypeFromProgID("DAO.DBEngine.36"));
// Type.GetTypeFromProgID 方法: 取得與指定的程式識別項(ProgID) 關聯的型別;
// 如果在載入Type 時發生錯誤,則傳回null。
// DAO.DBEngine.36 為Microsoft DAO 3.6 Object Library ( dao360.dll )
// 宣告變數
string[] strPara = new string[13];
string strDSN;
string strDriver;
// 設定ODBC DSN 參數內容
strPara[1] = "UID=admin";
strPara[2] = "Database=C:\\db1.mdb";
strPara[3] = "UserCommitSync=Yes";
strPara[4] = "Threads=3";
strPara[5] = "SafeTransactions=0";
strPara[6] = "PageTimeout=5";
strPara[7] = "MaxScanRows=8";
strPara[8] = "MaxBufferSize=2048";
strPara[9] = "FIL=MS Access";
strPara[10] = "DriverId=25";
strPara[11] = "DefaultDir=C:\\";
strPara[12] = "DBQ=C:\\db1.mdb";
// 使用者資料來源名稱
strDSN = "MyDataSourceName";
// 驅動程式
strDriver = "Microsoft Access Driver (*.mdb)";
object[] p = new object[] { strDSN, strDriver, true, string.Join('\0'.ToString(), strPara, 1, 12) };
// Type.InvokeMember 方法
// Type.InvokeMember (String, BindingFlags, Binder, Object, Object[])
dbe.GetType().InvokeMember("RegisterDatabase", BindingFlags.InvokeMethod, null, dbe, p);
// 透過DAO.DBEngine 物件的RegisterDatabase 方法新增一個ODBC 設定

沒有留言: