







 二、應(yīng)用程式連接失敗
  以上的三種錯(cuò)誤資訊都是發(fā)生在 sql server 自帶的客戶端工具中,在應(yīng)用程式中我們也會(huì)遇到類似的錯(cuò)誤資訊,例如:
microsoft ole db provider for sql server (0x80004005)
[dbnetlib][connectionopen (connect()).]specified sql server not found.
microsoft ole db provider for sql server (0x80004005)
用戶 'sa' 登錄失敗。原因: 未與信任 sql server 連接相關(guān)聯(lián)。
microsoft ole db provider for odbc drivers 錯(cuò)誤 '80004005'.
[microsoft][odbc sql server driver]超時(shí)已過期.
  首先,讓我們來詳細(xì)看以下的示意圖來了解一下使用 odbc 和使用 ole db 連接 sql server 有什麼不同之處。
   
 
  從上圖中,我們可以看出在實(shí)際使用中,應(yīng)用程式創(chuàng)建和使用各種 ado 對象,ado 對象框架調(diào)用享用的 ole db 提供者。為了訪問 sql server 數(shù)據(jù)庫,ole db 提供了兩種不同的方法:用於 sql server 的 ole db 提供者以及用於 odbc 的 ole db 提供者。這兩種不同的方法對應(yīng)於兩種不同的連接字符串,標(biāo)準(zhǔn)的連接字符串寫法如下所示:
  1、使用用於 sql server 的 ole db 提供者:
  使用 sql server 身份驗(yàn)證:
oconn.open "provider=sqloledb;" & _ 
"data source=myservername;" & _
"initial catalog=mydatabasename;" & _
"user id=myusername;" & _
"password=mypassword"
  使用 windows 身份驗(yàn)證(信任連接):
oconn.open "provider=sqloledb;" & _
"data source=myservername;" & _
"initial catalog=mydatabasename;" & _
"integrated security=sspi"
  2、使用用於 odbc 的 ole db 提供者(不使用 odbc 數(shù)據(jù)源):
  使用 sql server 身份驗(yàn)證:
oconn.open "driver={sql server};" & _ 
"server=myservername;" & _
"database=mydatabasename;" & _
"uid=myusername;" & _
"pwd=mypassword"
  使用 windows 身份驗(yàn)證(信任連接):
oconn.open "driver={sql server};" & _ 
"server=myservername;" & _
"database=mydatabasename;" & _
"trusted_connection=yes"
  3、使用用於 odbc 的 ole db 提供者(使用 odbc 數(shù)據(jù)源):
oconn.open "dsn=mysystemdsn;" & _ 
"uid=myusername;" & _ 
"pwd=mypassword"
  如果遇到連接失敗的情況,我們只要按照一中所示的方法,結(jié)合程式中的連接字符串進(jìn)行檢查,基本都能得到解決。另外,還有以下幾個(gè)要注意的地方:
  1、配置 odbc 數(shù)據(jù)源時(shí),點(diǎn)擊"客戶端"配置選項(xiàng)可以讓我們指定連接使用的網(wǎng)路庫、端口號等屬性,如下圖所示:
   
 
  2、如果遇到連接超時(shí)的錯(cuò)誤,我們可以在程式中修改 connection 對象的超時(shí)設(shè)置,再打開該連接。例如: 
| <% set conn = server.createobject("adodb.connection") dsntest="driver={sql server};server=servername;uid=user;pwd=password;database=mydatabase" conn. properties("connect timeout") = 15 '以秒為單位 conn.open dsntest %> | 
| dim cn as new adodb.connection dim rs as adodb.recordset . . . cmd1 = txtquery.text set rs = new adodb.recordset rs.properties("command time out") = 300 '同樣以秒為單位,如果設(shè)置為 0 表示無限制 rs.open cmd1, cn rs.movefirst . . . | 
新聞熱點(diǎn)
疑難解答
圖片精選