2013年9月27日 星期五

與各種資料庫的連線字串

用ASP連結資料庫有很多種方法。由於不同類型的資料庫,所以我們需要用各自的連結語法來產生對資料庫的連接。

在自己的電腦,我們可以使用DSN(Data Source Name)來連接,方法是在控制台設定ODBC 連線,再在ASP用該DSN作開啟即可。但在一些免費空間,我們則須用DSN-less的方式連接資料庫,我們要在ASP中列出驅動程式名稱及資料庫位置。

通常指出資料庫位置是需要使用絕對路徑的,但我們並不知道我們的資料夾的位置究竟在哪裏,所以我們會用Server.MapPath("資料庫名稱")來取得絕對路徑。

因應各種資料庫,我列出以下資料庫的連接語法如下:
註:不可分行(除非使用 & _ 連結兩行字串才可分行)。在這裏分行是為了方便閱讀。
  [ ] 內的東西若設了密碼才需要用到,沒設密碼則必須刪除。使用連線字串時請刪除「[」和「]」。
(資料來源:http://www.class2u.com/book/ultradev4/connection.htm)

Microsoft Access
1.Driver={Microsoft Access Driver (*.mdb)};Dbq=資料庫;[Uid=使用者名稱;Pwd=密碼;]
2.Provider=Microsoft.Jet.OLEDB.4.0;Data Source=資料庫;[User Id=使用者名稱;Password=密碼;]

Oracle
1. Driver={Microsoft ODBC for Oracle};Server=資料庫;[Uid=使用者名稱;Pwd=密碼;]
2. Provider=OraOLEDB.Oracle;Data Source=資料庫;[User Id=使用者名稱;Password=密碼;]

dBase
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=資料庫;

Microsoft Text Driver
1. Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=資料庫;Extensions=asc,csv,tab,txt;
 Persist Security Info=False;
2. Provider=Microsoft.Jet.OLEDB.4.0;Data Source=資料庫;
 Extended Properties='text;FMT=Delimited'

Microsoft SQL Server
1. Driver={SQL Server};Server=伺服器;Database=資料庫;
 [Uid=使用者名稱(預設帳戶為sa);Pwd=密碼;]
2. Provider=SQLOLEDB;Data Source=伺服器;Initial Catalog=資料庫;
 [User Id=使用者名稱(預設帳戶為sa);Password=密碼;]

MySQL
driver={mysql};database=資料庫;option=16386;[uid=使用者名稱;pwd=密碼;]

Visual Foxpro
Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;
 SourceDB=資料庫;Exclusive=No;

建立連線時,我們必須先建立連線元件,並因應該資料庫類型以上述連線方式連接資料庫。
假設資料庫路徑為在網頁底下的 abc.mdb (Access資料庫),使用者名稱為 abc 、密碼為 test ,你可以這樣作:
<%
Set objDBConn=Server.Createobject("ADODB.connection")   '建立連線元件
objDBConn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                            Server.MapPath("abc.mdb") & _
                            ";User Id=abc;Password=test;"
'用連結字串開啟OLE DB的Access資料庫。注意,若您的資料庫沒設使用者名稱及密碼,則不需User Id及Password屬性。
'此時資料庫已經開啟,我們可以執行SQL指令或是建立資料集元件,請參閱其他相關文章。
'當執行完SQL指令或其他相關操作,我們可以叫那元件「回家睡覺」了。
objDBConn.Close
Set objDBConn=Nothing
'關閉資料庫元件連接,釋放系統資源,「回家睡覺」去
%>


UltraDev 提供了多種方式,讓 ASP 的使用者與資料庫建立連線:

自己的電腦 -- 可以使用 DSN、自訂連線字串

應用程式伺服器上 -- 可以使用 DSN、自訂連線字串或 Server.Mappath
下面列出了幾種常見的資料庫,在 ASP 網站應用程式中使用 ADO 連線字串的範例。請特別注意,在自訂連線字串的對話框中,每個連線字串只能為同一行,不可以換行!但因網頁顯示的關係可能會換行,你必須自行將它連接起來。

--------------------------------------------------------------------------------

ODBC DSNLess connection
(不需要 DSN 的連線)
MS Access ODBC DSNless connection

Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\somepath\dbname.mdb;Uid=Admin;Pwd=pass;


dBase ODBC DSNless connection

Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\somepath\dbname.dbf;

Oracle ODBC DSNless connection

Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass;

MS SQL Server DSNless connection

Driver={SQL Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass;

MS Text Driver DSNless connection

Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False;

Visual Foxpro DSNless connection

Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\somepath\dbname.dbc;Exclusive=No;

MySQL DSNless connection

driver={mysql}; database=yourdatabase;uid=username;pwd=password;option=16386;

--------------------------------------------------------------------------------

OLE DB 連線
MS Access OLE DB connection

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\dbname.mdb;User Id=admin;Password=pass;

Oracle OLE DB connection

Provider=OraOLEDB.Oracle;Data Source=dbname;User Id=admin;Password=pass;

MS SQL Server OLE DB connection

Provider=SQLOLEDB;Data Source=machineName;Initial Catalog=dbname;User ID=sa;Password=pass;

MS Text Driver OLE DB connection

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\yourpath;Extended Properties='text;FMT=Delimited'"

(在自訂連線字串的對話框中,這個驅動程式前後一定要加上雙引號!)

如 果你不知道上傳之後的資料庫檔案路徑,可以從網址 http://www.basic-ultradev.com/extensions/getdatabasepath.mxp 下載這個 extension,在一個空白的頁面中加入該伺服器作用,並且輸入資料庫的檔案名稱,最後將頁面上傳到伺服器再瀏覽即可。頁面中會顯示出不需要 DSN 的連線字串,你可以將它拷貝至 UltraDev 中使用,如有需要請自行替換字串中的文字。

另一種方法是,只要簡單地將下面的 ASP 程式碼放到你的 HTML 原始碼檢視窗內,就會顯示出你的網站根目錄在伺服器上的路徑:

<%=server.mappath("")%>

你便可以利用這個資訊,在 ADO 連線字串中建立出資料庫的路徑。事先就找出檔案路徑要比使用 Server.MapPath 這樣的物件方法好的多。

--------------------------------------------------------------------------------

在 UltraDev 4 中使用 Server.Mappath
在 UltraDev 4 中,自訂連線字串的方式允許你使用 Server.Mappath,不過先決條件是:

定義連線的對話框中必須指定為「應用程式伺服器」,「這台機器」是不支援這種方式的。
必須在連線字串中指出根目錄的路徑。
請確定連線字串的第一個部份前後有使用雙引號括住。
典型的 Access 資料庫 DSNLess 連線字串,使用 Server.Mappath 在 VBScript 寫起來是這樣的。請注意在自訂連線字串的對話框中,只能為同一行文字。

"Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.Mappath("\somepath\dbname.mdb") & ";Uid=Admin;Pwd=pass;"

而典型的 Access 資料庫 OLEDB 連線字串則是:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("\somepath\dbname.mdb") & ";User Id=admin;Password=pass;"

如果你使用 ASP JavaScript,則必須將 & 符號改為 + 號,像是這樣:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.Mappath("\somepath\dbname.mdb") + ";User Id=admin;Password=pass;"

如果你使用 UltraDev 1,千萬不要在自訂連線字串中使用 Server.MapPath 這種方式,不然的話會讓 UltraDev 無法使用 。也就是說,你可以加入這樣的原始碼,但是資料繫結面板內不會顯示出任何資料。