在數據庫的各種應用程序開發中,連接數據庫是數據庫應用程序開發的第一步,同時也是最重要的一步。而對于不同的數據庫他們的連接模式各有不同,對應的連接串也不同。
sql server
· odbc
o 標準連接(standard security):
"driver={sql server};server=aron1;database=pubs;uid=sa;pwd=asdasd;"
1)當服務器為本地時server可以使用(local);
"driver={sql server};server=(local);database=pubs;uid=sa;pwd=asdasd;"
2)當連接遠程服務器時,需指定地址、端口號和網絡庫
"driver={sql server};server=130.120.110.001;address=130.120.110.001,1052;network=dbmssocn;database=pubs;uid=sa;pwd=asdasd;"
注:address參數必須為ip地址,而且必須包括端口號
o 信任連接(trusted connection): (microsoft windows nt 集成了安全性)
"driver={sql server};server=aron1;database=pubs;trusted_connection=yes;"
或者
"driver={sql server};server=aron1;database=pubs; uid=;pwd=;"
o 連接時彈出輸入用戶名和口令對話框:
conn.properties("prompt") = adpromptalways
conn.open "driver={sql server};server=aron1;database=pubs;"
· ole db, oledbconnection (.net)
o 標準連接(standard security):
"provider=sqloledb;data source=aron1;initial catalog=pubs;user id=sa;password=asdasd;"
o 信任連接(trusted connection):
"provider=sqloledb;data source=aron1;initial catalog=pubs;integrated security=sspi;"
(如果連接一個具體的已命名sqlserver實例,使用data source=servere name/instance name;但僅適用于 sqlserver2000)例如:”provider=sqloledb;data source=myservername/myinstancename;initial catalog=mydatabasename;user id=myusername;password=mypassword;”
o 連接時彈出輸入用戶名和口令對話框:
conn.provider = "sqloledb"
conn.properties("prompt") = adpromptalways
conn.open "data source=aron1;initial catalog=pubs;"
o 通過ip地址連接:
"provider=sqloledb;data source=190.190.200.100,1433;network library=dbmssocn;initial catalog=pubs;user id=sa;password=asdasd;"
(dbmssocn=tcp/ip代替named pipes, data source的末尾是需要使用的端口號(缺省為1433))
· sqlconnection (.net)
o 標準連接(standard security):
"data source=aron1;initial catalog=pubs;user id=sa;password=asdasd;"
或者
"server=aron1;database=pubs;user id=sa;password=asdasd;trusted_connection=false"
(這兩個連接串的結果相同)
o 信任連接(trusted connection):
"data source=aron1;initial catalog=pubs;integrated security=sspi;"
或者
"server=aron1;database=pubs;trusted_connection=true;"
(這兩個連接串的結果相同)
(可以用servername/instancename代替data source,取值為一個具體的sqlserver實例,但僅適用于 sqlserver2000)
o 通過ip地址連接:
"data source=190.190.200.100,1433;network library=dbmssocn;initial catalog=pubs;user id=sa;password=asdasd;"
(dbmssocn=tcp/ip代替named pipes, data source的末尾是需要使用的端口號(缺省為1433))
o sqlconnection連接的聲明:
c#:
using system.data.sqlclient;
sqlconnection sqlconn = new sqlconnection();
sqlconn.connectionstring="my connectionstring";
sqlconn.open();
vb.net:
imports system.data.sqlclient
dim sqlconn as sqlconnection = new sqlconnection()
sqlconn.connectionstring="my connectionstring"
sqlconn.open()
· data shape
o ms data shape
"provider=msdatashape;data provider=sqloledb;data source=aron1;initial catalog=pubs;user id=sa;password=asdasd;"
· 更多
o 如何定義使用哪個協議
§ 舉例:
"provider=sqloledb;data source=190.190.200.100,1433;network library=dbmssocn;initial catalog=pubs;user id=sa;password=asdasd;"
名稱 網絡協議庫
dbnmpntw win32 named pipes
dbmssocn win32 winsock tcp/ip
dbmsspxn win32 spx/ipx
dbmsvinn win32 banyan vines
dbmsrpcn win32 multi-protocol (windows rpc)
§ 重要提示
當通過sqloledb提供者進行連接時使用以下語法:
network library=dbmssocn
但通過msdasql提供者進行連接時使用以下語法:
network=dbmssocn
o 所有sqlconnection連接串屬性
§ 下表顯示了ado.net sqlconnection對象的所有連接串屬性. 其中大多數的屬性也在ado中使用.所有屬性和描述來自于msdn.
名稱 缺省值 描述
application name 應用程序名稱或者當沒有提供應用程序時為.net sqlclient數據提供者
attachdbfilename或者extended properties或者initial file name 主要文件的名字,包括相關聯數據庫的全路徑。數據庫名字必須通過關鍵字'database'來指定。
connect timeout或者connection timeout 15 在中止連接請求,產生錯誤之前等待服務器連接的時間(以秒為單位)
connection lifetime 0 當一個連接返回到連接池,當前時間與連接創建時間的差值,如果時間段超過了指定的連接生存時間,此連接就被破壞。它用于聚集設置中在運行服務器和準備上線的服務器之間強制負載平衡。
connection reset 'true' 當連接從連接池移走時決定是否重置數據庫連接。當設置為'false'時用于避免獲得連接時的額外服務器往復代價。
current language sql server語言記錄名稱
data source或server或address或addr或network address 要連接的sql server實例的名字或者網絡地址
enlist 'true' 為真時,連接池自動列出創建線程的當前事務上下文中的連接。
initial catalog或database 數據庫名
integrated security或者trusted_connection 'false' 連接是否為信任連接。其取值為'true', 'false'和'sspi'(等于'true').
max pool size 100 連接池中允許的最大連接數
min pool size 0 連接池中允許的最小連接數
network library或net 'dbmssocn' 網絡庫用于建立與一個 sql server實例的連接。值包括dbnmpntw (命名管道), dbmsrpcn (多協議), dbmsadsn (apple talk), dbmsgnet (via), dbmsipcn (共享內存) 和 dbmsspxn (ipx/spx), 和 dbmssocn (tcp/ip). 所連接的系統必須安裝相應的動態鏈接庫。如果你沒有指定網絡,當你使用一個局部的服務器 (例如, "." 或者 "(local)"),將使用共享內存
packet size 8192 與 sql server的一個實例通訊的網絡包字節大小
password-或pwd sql server帳戶登錄口令
persist security info 'false' 設置為'false',當連接已經打開或者一直處于打開狀態時,敏感性的安全信息 (如口令)不會返回作為連接的一部分信息。
pooling 'true' 為真時,從合適的連接池中取出sqlconnection對象,或者必要時創建sqlconnection對象并把它增加到合適的連接池中。
user id sql server登錄用戶
workstation id the local computer name 連接到sql server的工作站名稱
§ 注意:
使用分號分隔每個屬性
如果一個名字出現多于兩次,在連接串中的最后一次出現的值將被使用。
如果你通過在應用中由用戶輸入字段的值來構建連接串,你必須保證用戶不會通過用戶值里的另一個值插入到一個額外的屬性來改變連接串。
access
· odbc
o 標準連接(standard security):
"driver={microsoft access driver (*.mdb)};dbq=c:/mydatabase.mdb;uid=admin;pwd=;"
o 組(系統數據庫)連接 (workgroup):
兩種方法分別為:在連接串或在打開數據集中指定用戶名和口令
"driver={microsoft access driver (*.mdb)};dbq=c:/mydatabase.mdb;systemdb=c:/mydatabase.mdw;","admin", ""
或
if(pdb.open("driver={microsoft access driver (*.mdb)};dbq=c:/mydatabase.mdb;systemdb=c:/mydatabase.mdw;", "", "databaseuser", "databasepass"))
{dosomething();
pdb.close();
}
o 獨占方式(exclusive):
"driver={microsoft access driver (*.mdb)};dbq=c:/mydatabase.mdb;exclusive=1;uid=admin;pwd="
· ole db, oledbconnection (.net)
o 標準連接(standard security):
"provider=microsoft.jet.oledb.4.0;data source=/somepath/mydb.mdb;user id=admin;password=;"
o 組連接 (系統數據庫)
"provider=microsoft.jet.oledb.4.0;data source=/somepath/mydb.mdb;jet oledb:system database=system.mdw;","admin", ""
o 帶口令的連接:
"provider=microsoft.jet.oledb.4.0;data source=/somepath/mydb.mdb;jet oledb:database password=mydbpassword;","admin", ""
· oracle
· odbc
o 新版本:
"driver={microsoft odbc for oracle};server=oracleserver.world;uid=username;pwd=asdasd;"
o 舊版本:
"driver={microsoft odbc driver for oracle};connectstring=oracleserver.world;uid=myusername;pwd=mypassword;"
· ole db, oledbconnection (.net)
o 標準連接(standard security):
"provider=msdaora;data source=myoracledb;user id=username;password=asdasd;"
這是microsoft的格式, 下面是oracle的格式(提供者不同)
"provider=oraoledb.oracle;data source=myoracledb;user id=username;password=asdasd;"
注意:"data source=" 必須根據相應的命名方法設置為net8名稱。例如對于局部命名,它是tnsnames.ora中的別名,對于oracle命名,它是net8網絡服務名
o 信任連接(trusted connection):
"provider=oraoledb.oracle;data source=myoracledb;osauthent=1;"
或者設置user id為 "/"
"provider=oraoledb.oracle;data source=myoracledb;user id=/;password=;"
· oracleconnection (.net)
o 標準連接:
"data source=oracle8i;integrated security=yes";
這只對oracle 8i release 3或更高版本有效
o oracleconnection聲明:
c#:
using system.data.oracleclient;
oracleconnection oracleconn = new oracleconnection();
oracleconn.connectionstring = "my connectionstring";
oracleconn.open();
vb.net:
imports system.data.oracleclient
dim oracleconn as oracleconnection = new oracleconnection()
oracleconn.connectionstring = "my connectionstring"
oracleconn.open()
· data shape
o ms data shape:
"provider=msdatashape.1;persist security info=false;data provider=msdaora;data source=orac;user id=username;password=mypw"
· mysql
· odbc
o 本地數據庫:
"driver={mysql};server=mysrvname;option=16834;database=mydatabase;"
sever參數也可以使用localhost作為其值
o 遠程數據庫:
"driver={mysql};server=data.domain.com;port=3306;option=131072;stmt=;database=my-database;uid=username;pwd=password;"
option值 取值的含義
1 客戶端不能處理myodbc返回一列真實寬度的情況
2 客戶端不能處理mysql返回影響的行的真實值的情況如果設置此標志,mysql返回’found rows’。 mysql 3.21.14或更新版才能生效
4 在c:/myodbc.log中生成一個調試日志。這與在`autoexec.bat'中的設置mysql_debug=d:t:o,c::/myodbc.log相同
8 對于結果和參數不設置任何包限制
16 不使驅動器彈出問題
32 使用或去除動態游標支持。這在myodbc 2.50中是不允許的
64 在'database.table.column'中忽略數據庫名字的使用
128 強制使用odbc管理器游標
256 去除擴展取值(fetch)的使用
512 充滿char字段滿長度
1024 sqldescribecol()函數返回完全滿足條件的列名
2048 使用壓縮的服務器/客戶端協議
4096 告訴服務器在函數后和'('前忽略空格 (powerbuilder需要)。這將產生所有函數名關鍵詞
8192 使用命名管道連接運行在nt上的mysqld服務器
16384 將longlong列改為intl列(有些應用不能處理longlong列)
32768 從sqltables中返回’user’作為table_qualifier和table_owner
66536 從客戶端讀參數,從`my.cnf'讀odbc群
131072 增加一些額外的安全性檢查
如果你需要許多選項,你應該把以上標志相加。
· ole db, oledbconnection (.net)
o 標準連接:
"provider=mysqlprov;data source=mydb;user id=username;password=asdasd;"
data source是mysql數據庫的名字,也可以使用server=localhost;db=test
· mysqlconnection (.net)
o einfodesigns.dbprovider:
"data source=server;database=mydb;user id=username;password=pwd;command logging=false"
只適用于 einfodesigns dbprovider, 附加到 .net
o mysqlconnection的聲明:
c#:
using einfodesigns.dbprovider.mysqlclient;
mysqlconnection mysqlconn = new mysqlconnection();
mysqlconn.connectionstring = "my connectionstring";
mysqlconn.open();
vb.net:
imports einfodesigns.dbprovider.mysqlclient
dim mysqlconn as mysqlconnection = new mysqlconnection()
mysqlconn.connectionstring = "my connectionstring"
mysqlconn.open()
· interbase
· odbc, easysoft
o 本地計算機:
"driver={easysoft ib6 odbc};server=localhost;database=localhost:c:/mydatabase.gdb;uid=username;pwd=password"
o 遠程計算機:
"driver={easysoft ib6 odbc};server=computername;database=computername:c:/mydatabase.gdb;uid=username;pwd=password"
· odbc, intersolv
o 本地計算機:
"driver={intersolv interbase odbc driver (*.gdb)};server=localhost;database=localhost:c:/mydatabase.gdb;uid=username;pwd=password"
o 遠程計算機:
"driver={intersolv interbase odbc driver (*.gdb)};server=computername;database=computername:c:/mydatabase.gdb;uid=username;pwd=password"
這個驅動器現在由 datadirect technologies來提供 (以前由intersolv提供)
· ole db, sibprovider
o 標準連接:
"provider=sibprovider;location=localhost:;data source=c:/databases/gdbs/mygdb.gdb;user id=sysdba;password=masterkey"
o 指定字符集:
"provider=sibprovider;location=localhost:;data source=c:/databases/gdbs/mygdb.gdb;user id=sysdba;password=masterkey;character set=iso8859_1"
o 指定角色:
"provider=sibprovider;location=localhost:;data source=c:/databases/gdbs/mygdb.gdb;user id=sysdba;password=masterkey;role=digitadores"
· 需要了解更多請鏈接到interbase的如下borland開發者網絡文章http://community.borland.com/article/0,1410,27152,00.html
· ibm db2
· ole db, oledbconnection (.net) from ms
o tcp/ip:
"provider=db2oledb;network transport library=tcpip;network address=xxx.xxx.xxx.xxx;initial catalog=myctlg;package collection=mypkgcol;default schema=schema;user id=myuser;password=mypw"
o appc:
"provider=db2oledb;appc local lu alias=myalias;appc remote lu alias=myremote;initial catalog=myctlg;package collection=mypkgcol;default schema=schema;user id=myuser;password=mypw"
as400
· odbc
" driver={client access odbc driver (32-bit)};system=myas400;uid=myusername;pwd=mypassword"
· ole db, oledbconnection (.net)
"provider=ibmda400;data source=myas400;user id=myusername;password=mypassword;"
· sybase
· odbc
o sybase system 12 (或 12.5) enterprise open client標準連接:
"driver={sybase ase odbc driver};srvr=aron1;uid=username;pwd=password"
o sybase system 11標準連接:
"driver={sybase system 11};srvr=aron1;uid=username;pwd=password;"
o intersolv 3.10:
"driver={intersolv 3.10 32-bit sybase};srvr=aron1;uid=username;pwd=password;"
o sybase sql anywhere (以前為watcom sql odbc driver):
"odbc; driver=sybase sql anywhere 5.0; defaultdir=c:/dbfolder/;dbf=c:/mydatabase.db;uid=username;pwd=password;dsn="""""
注意: 對于在末尾緊跟著dsn 參數被引用的雙引號(vb語法), 你必須改變符合你所使用的語言所指定的引用符號語法。dsn參數為空實際上非常重要,如果不包括的話將導致7778錯誤。
· ole db
o adaptive server anywhere (asa):
"provider=asaprov;data source=myasa"
o adaptive server enterprise (ase)(帶數據源為.ids文件):
"provider=sybase ase ole db provider; data source=myase"
注意你必須使用數據管理器來創建一個數據源.ids文件.這些.ids 文件類似于odbc dsns.
visual foxpro(dbase)
· odbc
o dbase:
" driver={microsoft dbase driver (*.dbf)}; driverid=277;dbq=c://databasepath"
注意在書寫sql語句時必須指定文件名(如“select name, address from clients.dbf”).
o visual foxpro(有數據庫容器):
" driver={microsoft visual foxpro driver};uid=; sourcetype=dbc;sourcedb=c://databasepath//mydatabase.dbc;exclusive=no "
o visual foxpro(無數據庫容器):
" driver={microsoft visual foxpro driver};uid=; sourcetype=dbf;sourcedb=c://databasepath//mydatabase.dbc;exclusive=no"
· ole db, oledbconnection (.net)
o 標準連接:
"provider=vfpoledb;data source=c://databasepath//mydatabase.dbc;"
excel
· odbc
o 標準連接(standard security):
" driver={microsoft excel driver (*.xls)};driverid=790; dbq =c://databasepath//dbspreadsheet.xls;defaultdir=c://databasepath;"
· ole db provider for microsoft jet
o 標準連接(standard security):
"provider=microsoft.jet.oledb.4.0;data source=c://databasepath//dbspreadsheet.xls;extended properties=/"/"excel 8.0;hdr=yes;/"/";"
注意:如果"hdr=yes",那么提供者不會在記錄集中包括選擇的第一行,如果,那么提供者將在記錄集中包括單元范圍(或已經命名范圍)的第一行
text
· odbc
o 標準連接(standard security):
" driver={microsoft text driver (*.txt; *.csv)}; dbq=c://databasepath//;extensions=asc,csv,tab,txt;"
如果文本文件使用tab作為分隔符,你必須創建schema.ini文件,你必須在連接串中使用format=tabdelimited選項。
注意:你必須在sql語句中指定文件名(例如"select name, address from clients.csv")
· ole db provider for microsoft jet
o 標準連接(standard security):
"provider=microsoft.jet.oledb.4.0;data source=c://databasepath//;extended properties=/"/"text;"hdr=yes;fmt=delimited;/"/";"
注意在書寫sql語句時必須指定文件名(如“select name, address from clients.txt”).
odbc dsn
" dsn=mydsn;uid=myusername;pwd=mypassword;"
ole db provider for odbc databases
連接access:
"provider=msdasql;driver={microsoft access driver (*.mdb)};dbq=c://databasepath//mydatabase.mdb;uid=myusername;pwd=mypassword;"
連接sql server:
"provider=msdasql;driver={sql server};server=myservername;database=mydatabasename;uid=myusername;pwd=mypassword;"
使用dsn進行連接:
"provider=msdasql;persistsecurityinfo=false;trusted_connection=yes;data source=mydsn;catalog=mydatabase;"
ole db provider for olap
"provider=msolap;data source=myolapservername;initial catalog=myolapdatabasename;"
通過http連接:
這個特征允許客戶端應用程序通過在客戶端應用程序連接字符串的data source參數中指定一個url并使用iis連接到一個分析服務器。這種連接方法允許pivottable服務通過防火墻或者代理服務器連接到分析服務器。一個特殊的asp頁面msolap.asp通過iis進行連接。當連接到服務器時,這個文件一定在這個目錄中并且作為url的一部分(例如http://www.myserver.com/myolap/)。
使用url連接:
"provider=msolap;data source=http://myolapservername/;initial catalog=myolapdatabasename;"
使用ssl連接:
"provider=msolap;data source=https://myolapservername/;initial catalog=myolapdatabasename;"
ole db provider for active directory
"provider=adsdsoobject;user id=myusername;password=mypassword;"
ole db provider for index server
"provider=msidxs;data source=mycatalog;"
ole db data link connections
"file name=c://databasepath//databasename.udl;"
outlook 2000 personal mail box
"provider=microsoft.jet.oledb.4.0;outlook 9.0;mapilevel=;database=c://temp//;"
使用任何臨時文件夾代替c:/temp。這將在那個文件夾創建一個模式文件,當你打開它時,它會顯示可以得到的所有字段。空的mapilevel表明最高層的文件夾。
exchange mail box
"provider=microsoft.jet.oledb.4.0;exchange 4.0;mapilevel=mailbox - pat smith|;database=c://temp//;"
使用任何臨時文件夾代替c:/temp.
注意:你能象數據庫一樣對mail store輸入查詢
舉例:"sql "select contacts.* from contacts;"