第一篇:SQLServe數(shù)據(jù)源連接失敗問題總結(jié)
SQL Server ODBC數(shù)據(jù)源連接失敗問題總結(jié)
本文針對(duì)SQL Server 不存在或是訪問被拒絕、[Microsoft][ODBC Sql Server Driver]無效的連接、SQLSERVER錯(cuò)誤:18452三種常見的連接錯(cuò)誤問題,提出了解決的方法,并且親身實(shí)踐。
在提出問題之前,首先要檢查防火墻和殺毒軟件是否關(guān)閉,接著,在建立連接的時(shí)候,要保證SQL Server 服務(wù)器是打開的。以上都做到后,請(qǐng)參考下文的出錯(cuò)情況以及解決方法。
一、錯(cuò)誤1:SQL Server 不存在或是訪問被拒絕
SQLState:01000 SQL Server 錯(cuò)誤: 64 [Microsoft][ODBC SQL Server Driver][DBNETLIB] ConnectionOpen(Connect())連接失敗
SQLState:08001 SQL Server 錯(cuò)誤: 17 [Microsoft][ODBC SQL Server Driver][DBNETLIB] SQL Server 不存在或是訪問被拒絕
檢查1433端口是否打開
沒有找到1433端口
說明1433端口沒有打開。
打開1433端口的方法:
1.針對(duì)我安裝的系統(tǒng)SP3,安裝的SQL2005默認(rèn)TCP/IP的狀態(tài)是禁止的,因此:
選擇SQL Server Configuration Manager,然后分別打開SQL Server 2005 Services和SQL Server 2005 Client Configuration,并把TCP/IP和Nameed Pipes的狀態(tài)設(shè)置為Enabled;
2.如果不行,就需要更新系統(tǒng)
更新后,一定要重啟電腦。
.重新檢查1433端口,如下圖所示,發(fā)現(xiàn)1433已經(jīng)打開。
二、錯(cuò)誤2:[Microsoft][ODBC Sql Server Driver]無效的連接
再次打開ODBC,進(jìn)行到第二步時(shí),又出錯(cuò)了,不過這次的錯(cuò)誤如圖所示,顯示的無效的連接,和之前的錯(cuò)誤不同。連接失敗
Sqlstate :'01000' Sql server錯(cuò)誤:14
[Microsoft][ODBC Sql Server Driver][DBNETLIB] connectionOpen(Invalid Instance())
連接失?。?/p>
Sql State:'08001' Sql Server錯(cuò)誤:14
[Microsoft][ODBC Sql Server Driver]無效的連接
原因在于你的服務(wù)器沒有啟動(dòng),只要啟動(dòng)服務(wù)器即可
解決的方法如下:
1.選擇下圖的SQL Server Surface Area Configuration
接著如下圖所示,依次點(diǎn)擊Surface Area Configuration for Services and Connections和Surface Area Configuration for Features
如下面兩個(gè)圖所示,必須保證startup type為Automic,以及service status為Running(即start按鈕鍵為灰色)。
三、錯(cuò)誤3:SQLSERVER錯(cuò)誤:18452
設(shè)置完畢后,再次打開ODBC,進(jìn)行到第二步時(shí),又出錯(cuò)了,不過這次的錯(cuò)誤又和之前的錯(cuò)誤不同,SQLSTATE:28000
SQLSERVER錯(cuò)誤:18452
[MICROSOFT][ODBC SQLSERVER DRIVER][SQL SERVER]用戶‘sa’ 登錄失敗
原因:未與信任SQL Server連接相關(guān)聯(lián)
該錯(cuò)誤產(chǎn)生的原因是由于SQL Server使用了“僅
Windows”的身份驗(yàn)證方式,因此用戶無法使用SQL Server的登錄帳戶(例如
sa)進(jìn)行連接。
SQL 服務(wù)器已配置為在 “ Windows 身份驗(yàn)證模式(Windows 身份驗(yàn)證)” 操作和不允許使用 SQL 帳戶。
解決方法如下:
1、設(shè)置允許SQL Server身份登錄 操作步驟:
第一步:在“Microsoft SQL Server Management Stdio”中,展開“SQL Server組”,鼠標(biāo)右鍵點(diǎn)擊SQL Server服務(wù)器的名稱。
第二步:選擇“屬性”
第三步:再選擇“安全性”選項(xiàng)卡
第四步:在“身份驗(yàn)證”下,選擇“SQL Server和Windows身份驗(yàn)證模式” 第五步:確定,并重新啟動(dòng)SQL Server服務(wù)。
2、如果還是沒解決,可以檢查SA用戶是否被打開: 第一步:右鍵SA用戶,打開屬性。
第二步:選擇“狀態(tài)”選項(xiàng)卡,勾選登陸中的啟用。
SA沒有被啟用,在數(shù)據(jù)庫(kù)剛開始使用的時(shí)候很容易出現(xiàn),安裝的SQLServer,SA用戶默認(rèn)是關(guān)閉的,往往不被人知道。
當(dāng)然可以新建一個(gè)用戶,限于篇幅原因,讀者參考下面的資料 http://apps.hi.baidu.com/share/detail/32872545
到此,創(chuàng)建到SQL Server 2005的數(shù)據(jù)源成功!附圖如下
第二篇:SQL_Server_ODBC數(shù)據(jù)源連接失敗問題總結(jié)
SQL Server ODBC數(shù)據(jù)源連接失敗問題總結(jié)
本文針對(duì)SQL Server 不存在或是訪問被拒絕、[Microsoft][ODBC Sql Server Driver]無效的連接、SQLSERVER錯(cuò)誤:18452三種常見的連接錯(cuò)誤問題,提出了解決的方法,并且親身實(shí)踐。在提出問題之前,首先要檢查防火墻和殺毒軟件是否關(guān)閉,接著,在建立連接的時(shí)候,要保證SQL Server 服務(wù)器是打開的。以上都做到后,請(qǐng)參考下文的出錯(cuò)情況以及解決方法。
一、錯(cuò)誤1:SQL Server 不存在或是訪問被拒絕
SQLState:01000 SQL Server 錯(cuò)誤: 64 [Microsoft][ODBC SQL Server Driver][DBNETLIB] ConnectionOpen(Connect())連接失敗
SQLState:08001 SQL Server 錯(cuò)誤: 17 [Microsoft][ODBC SQL Server Driver][DBNETLIB] SQL Server 不存在或是訪問被拒絕
檢查1433端口是否打開
沒有找到1433端口
說明1433端口沒有打開。
打開1433端口的方法:
1.針對(duì)我安裝的系統(tǒng)SP3,安裝的SQL2005默認(rèn)TCP/IP的狀態(tài)是禁止的,因此:
選擇SQL Server Configuration Manager,然后分別打開SQL Server 2005 Services和SQL Server 2005 Client Configuration,并把TCP/IP和Nameed Pipes的狀態(tài)設(shè)置為Enabled;
2.如果不行,就需要更新系統(tǒng)
更新后,一定要重啟電腦。
.重新檢查1433端口,如下圖所示,發(fā)現(xiàn)1433已經(jīng)打開。
二、錯(cuò)誤2:[Microsoft][ODBC Sql Server Driver]無效的連接
再次打開ODBC,進(jìn)行到第二步時(shí),又出錯(cuò)了,不過這次的錯(cuò)誤如圖所示,顯示的無效的連接,和之前的錯(cuò)誤不同。連接失敗
Sqlstate :'01000' Sql server錯(cuò)誤:14
[Microsoft][ODBC Sql Server Driver][DBNETLIB] connectionOpen(Invalid Instance())
連接失敗:
Sql State:'08001' Sql Server錯(cuò)誤:14
[Microsoft][ODBC Sql Server Driver]無效的連接
原因在于你的服務(wù)器沒有啟動(dòng),只要啟動(dòng)服務(wù)器即可
解決的方法如下:
1.選擇下圖的SQL Server Surface Area Configuration
接著如下圖所示,依次點(diǎn)擊Surface Area Configuration for Services and Connections和Surface Area Configuration for Features
如下面兩個(gè)圖所示,必須保證startup type為Automic,以及service status為Running(即start按鈕鍵為灰色)。
三、錯(cuò)誤3:SQLSERVER錯(cuò)誤:18452
設(shè)置完畢后,再次打開ODBC,進(jìn)行到第二步時(shí),又出錯(cuò)了,不過這次的錯(cuò)誤又和之前的錯(cuò)誤不同,SQLSTATE:28000
SQLSERVER錯(cuò)誤:18452
[MICROSOFT][ODBC SQLSERVER DRIVER][SQL SERVER]用戶‘sa’ 登錄失敗
原因:未與信任SQL Server連接相關(guān)聯(lián)
該錯(cuò)誤產(chǎn)生的原因是由于SQL Server使用了“僅
Windows”的身份驗(yàn)證方式,因此用戶無法使用SQL Server的登錄帳戶(例如
sa)進(jìn)行連接。
SQL 服務(wù)器已配置為在 “ Windows 身份驗(yàn)證模式(Windows 身份驗(yàn)證)” 操作和不允許使用 SQL 帳戶。
解決方法如下:
1、設(shè)置允許SQL Server身份登錄 操作步驟:
第一步:在“Microsoft SQL Server Management Stdio”中,展開“SQL Server組”,鼠標(biāo)右鍵點(diǎn)擊SQL Server服務(wù)器的名稱。
第二步:選擇“屬性”
第三步:再選擇“安全性”選項(xiàng)卡
第四步:在“身份驗(yàn)證”下,選擇“SQL Server和Windows身份驗(yàn)證模式” 第五步:確定,并重新啟動(dòng)SQL Server服務(wù)。
2、如果還是沒解決,可以檢查SA用戶是否被打開: 第一步:右鍵SA用戶,打開屬性。
第二步:選擇“狀態(tài)”選項(xiàng)卡,勾選登陸中的啟用。
SA沒有被啟用,在數(shù)據(jù)庫(kù)剛開始使用的時(shí)候很容易出現(xiàn),安裝的SQLServer,SA用戶默認(rèn)是關(guān)閉的,往往不被人知道。
到此,創(chuàng)建到SQL Server 2005的數(shù)據(jù)源成功!附圖如下
第三篇:小結(jié)SQLServer連接失敗錯(cuò)誤及解決
小結(jié)SQL Server連接失敗錯(cuò)誤及解決
在使用 SQL Server 的過程中,用戶遇到的最多的問題莫過于連接失敗了。一般而言,有以下兩種連接 SQL Server 的方式,一是利用 SQL Server 自帶的客戶端工具,如企業(yè)管理器、查詢分析器、事務(wù)探查器等;二是利用用戶自己開發(fā)的客戶端程序,如ASP 腳本、VB程序等,客戶端程序中又是利用 ODBC 或者 OLE DB 等連接 SQL Server。下面,我們將就這兩種連接方式,具體談?wù)勅绾蝸斫鉀Q連接失敗的問題。
一、客戶端工具連接失敗
在使用 SQL Server 自帶的客戶端工具(以企業(yè)管理器為例)連接 SQL Server時(shí),最常見的錯(cuò)誤有如下一些:
1、SQL Server 不存在或訪問被拒絕
ConnectionOpen(Connect())
2、用戶'sa'登錄失敗。原因:未與信任 SQL Server 連接相關(guān)聯(lián)。
3、超時(shí)已過期。
下面我們依次介紹如何來解決這三個(gè)最常見的連接錯(cuò)誤。
第一個(gè)錯(cuò)誤“SQL Server 不存在或訪問被拒絕”通常是最復(fù)雜的,錯(cuò)誤發(fā)生的原因比較多,需要檢查的方面也比較多。一般說來,有以下幾種可能性:
1、SQL Server名稱或IP地址拼寫有誤;
2、服務(wù)器端網(wǎng)絡(luò)配置有誤;
3、客戶端網(wǎng)絡(luò)配置有誤。
要解決這個(gè)問題,我們一般要遵循以下的步驟來一步步找出導(dǎo)致錯(cuò)誤的原因。
首先,檢查網(wǎng)絡(luò)物理連接:
ping <服務(wù)器IP地址>
或者
ping <服務(wù)器名稱>
如果 ping <服務(wù)器IP地址> 失敗,說明物理連接有問題,這時(shí)候要檢查硬件設(shè)備,如網(wǎng)卡、HUB、路由器等。還有一種可能是由于客戶端和服務(wù)器之間安裝有防火墻軟件造成的,比如 ISA Server。防火墻軟件可能會(huì)屏蔽對(duì) ping、telnet 等的響應(yīng),因此在檢查連接問題的時(shí)候,我們要先把防火墻軟件暫時(shí)關(guān)閉,或者打開所有被封閉的端口。
如果ping <服務(wù)器IP地址> 成功而 ping <服務(wù)器名稱> 失敗,則說明名字解析有問題,這時(shí)候要檢查 DNS 服務(wù)是否正常。有時(shí)候客戶端和服務(wù)器不在同一個(gè)局域網(wǎng)里面,這時(shí)候很可能無法直接使用服務(wù)器名稱來標(biāo)識(shí)該服務(wù)器,這時(shí)候我們可以使用HOSTS文件來進(jìn)行名字解析,具體的方法是:
1、使用記事本打開HOSTS文件(一般情況下位于C:WINNTsystem32driversetc).2、添加一條IP地址與服務(wù)器名稱的對(duì)應(yīng)記錄,如:
172.168.10.24 myserver
也可以在 SQL Server 的客戶端網(wǎng)絡(luò)實(shí)用工具里面進(jìn)行配置,后面會(huì)有詳細(xì)說明。
其次,使用 telnet 命令檢查SQL Server服務(wù)器工作狀態(tài):
telnet <服務(wù)器IP地址> 1433
如果命令執(zhí)行成功,可以看到屏幕一閃之后光標(biāo)在左上角不停閃動(dòng),這說明 SQL Server 服務(wù)器工作正常,并且正在監(jiān)聽1433端口的 TCP/IP 連接;如果命令返回“無法打開連接”的錯(cuò)誤信息,則說明服務(wù)器端沒有啟動(dòng) SQL Server 服務(wù),也可能服務(wù)器端沒啟用 TCP/IP 協(xié)議,或者服務(wù)器端沒有在 SQL Server 默認(rèn)的端口1433上監(jiān)聽。
接著,我們要到服務(wù)器上檢查服務(wù)器端的網(wǎng)絡(luò)配置,檢查是否啟用了命名管道,是否啟用了 TCP/IP 協(xié)議等等。我們可以利用 SQL Server 自帶的服務(wù)器網(wǎng)絡(luò)使用工具來進(jìn)行檢查。
點(diǎn)擊:程序-> Microsoft SQL Server-> 服務(wù)器網(wǎng)絡(luò)使用工具,打開該工具后看到的畫面如下圖所示:
從這里我們可以看到服務(wù)器啟用了哪些協(xié)議。一般而言,我們啟用命名管道以及 TCP/IP 協(xié)議。
點(diǎn)中 TCP/IP 協(xié)議,選擇“屬性”,我們可以來檢查 SQK Server 服務(wù)默認(rèn)端口的設(shè)置,如下圖所示:
一般而言,我們使用 SQL Server 默認(rèn)的1433端口。如果選中“隱藏服務(wù)器”,則意味著客戶端無法通過枚舉服務(wù)器來看到這臺(tái)服務(wù)器,起到了保護(hù)的作用,但不影響連接。
檢查完了服務(wù)器端的網(wǎng)絡(luò)配置,接下來我們要到客戶端檢查客戶端的網(wǎng)絡(luò)配置。我們同樣可以利用 SQL Server 自帶的客戶端網(wǎng)絡(luò)使用工具來進(jìn)行檢查,所不同的是這次是在客戶端來運(yùn)行這個(gè)工具。
點(diǎn)擊:程序-> Microsoft SQL Server-> 客戶端網(wǎng)絡(luò)使用工具,打開該工具后看到的畫面如下圖所示:
從這里我們可以看到客戶端啟用了哪些協(xié)議。一般而言,我們同樣需要啟用命名管道以及 TCP/IP 協(xié)議。
點(diǎn)擊 TCP/IP 協(xié)議,選擇“屬性”,可以檢查客戶端默認(rèn)連接端口的設(shè)置,如下圖所示。
該端口必須與服務(wù)器一致。
單擊“別名”選項(xiàng)卡,還可以為服務(wù)器配置別名。服務(wù)器的別名是用來連接的名稱,連接參數(shù)中的服務(wù)器是真正的服務(wù)器名稱,兩者可以相同或不同。如下圖中,我們可以使用myserver來代替真正的服務(wù)器名稱sql2kcn-02,并且使用網(wǎng)絡(luò)庫(kù) Named Pipes。別名的設(shè)置與使用HOSTS文件有相似之處。
通過以上幾個(gè)方面的檢查,錯(cuò)誤 1 發(fā)生的原因基本上可以被排除。下面我們?cè)僭敿?xì)描述如何來解決錯(cuò)誤 2。
當(dāng)用戶嘗試在查詢分析器里面使用sa來連接SQL Server,或者在企業(yè)管理器里面使用sa來新建一個(gè)SQL Server注冊(cè)時(shí),經(jīng)常會(huì)遇到如圖 2 所示的錯(cuò)誤信息。該錯(cuò)誤產(chǎn)生的原因是由于SQL Server使用了“僅 Windows”的身份驗(yàn)證方式,因此用戶無法使用SQL Server的登錄帳戶(如 sa)進(jìn)行連接。解決方法如下所示:
1、在服務(wù)器端使用企業(yè)管理器,并且選擇“使用 Windows 身份驗(yàn)證”連接上 SQL Server;
2、展開“SQL Server組”,鼠標(biāo)右鍵點(diǎn)擊SQL Server服務(wù)器的名稱,選擇“屬性”,再選擇“安全性”選項(xiàng)卡;
3、在“身份驗(yàn)證”下,選擇“SQL Server和 Windows ”。
4、重新啟動(dòng)SQL Server服務(wù)。
在以上解決方法中,如果在第 1 步中使用“使用 Windows 身份驗(yàn)證”連接 SQL Server 失敗,那么我們將遇到一個(gè)兩難的境地:首先,服務(wù)器只允許了 Windows 的身份驗(yàn)證;其次,即使使用了 Windows 身份驗(yàn)證仍然無法連接上服務(wù)器。這種情形被形象地稱之為“自己把自己鎖在了門外”,因?yàn)闊o論用何種方式,用戶均無法使用進(jìn)行連接。實(shí)際上,我們可以通過修改一個(gè)注冊(cè)表鍵值來將身份驗(yàn)證方式改為 SQL Server 和 Windows 混合驗(yàn)證,步驟如下所示:
1、點(diǎn)擊“開始”-“運(yùn)行”,輸入regedit,回車進(jìn)入注冊(cè)表編輯器;
2、依次展開注冊(cè)表項(xiàng),瀏覽到以下注冊(cè)表鍵:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServer]
3、在屏幕右方找到名稱“LoginMode”,雙擊編輯雙字節(jié)值;
4、將原值從1改為2,點(diǎn)擊“確定”;
5、關(guān)閉注冊(cè)表編輯器;
6、重新啟動(dòng)SQL Server服務(wù)。
此時(shí),用戶可以成功地使用sa在企業(yè)管理器中新建SQL Server注冊(cè),但是仍然無法使用Windows身份驗(yàn)證模式來連接SQL Server。這是因?yàn)樵?SQL Server 中有兩個(gè)缺省的登錄帳戶:BUILTINAdministrators 以及 <機(jī)器名>Administrator 被刪除。要恢復(fù)這兩個(gè)帳戶,可以使用以下的方法:
1、打開企業(yè)管理器,展開服務(wù)器組,然后展開服務(wù)器;
2、展開“安全性”,右擊“登錄”,然后單擊“新建登錄”;
3、在“名稱”框中,輸入 BUILTINAdministrators;
4、在“服務(wù)器角色”選項(xiàng)卡中,選擇“System Administrators” ;
5、點(diǎn)擊“確定”退出;
6、使用同樣方法添加 <機(jī)器名>Administrator 登錄。
以下注冊(cè)表鍵
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServerLoginMode 的值決定了SQL Server將采取何種身份驗(yàn)證模式。該值為1,表示使用Windows 身份驗(yàn)證模式;該值為2,表示使用混合模式(Windows 身份驗(yàn)證和 SQL Server 身份驗(yàn)證)。
看完如何解決前兩個(gè)錯(cuò)誤的方法之后,讓我們來看一下如圖 3 所示的第三個(gè)錯(cuò)誤。
如果遇到第三個(gè)錯(cuò)誤,一般而言表示客戶端已經(jīng)找到了這臺(tái)服務(wù)器,并且可以進(jìn)行連接,不過是由于連接的時(shí)間大于允許的時(shí)間而導(dǎo)致出錯(cuò)。這種情況一般會(huì)發(fā)生在當(dāng)用戶在Internet上運(yùn)行企業(yè)管理器來注冊(cè)另外一臺(tái)同樣在Internet上的服務(wù)器,并且是慢速連接時(shí),有可能會(huì)導(dǎo)致以上的超時(shí)錯(cuò)誤。有些情況下,由于局域網(wǎng)的網(wǎng)絡(luò)問題,也會(huì)導(dǎo)致這樣的錯(cuò)誤。
要解決這樣的錯(cuò)誤,可以修改客戶端的連接超時(shí)設(shè)置。默認(rèn)情況下,通過企業(yè)管理器注冊(cè)另外一臺(tái)SQL Server的超時(shí)設(shè)置是 4 秒,而查詢分析器是 15 秒(這也是為什么在企業(yè)管理器里發(fā)生錯(cuò)誤的可能性比較大的原因)。具體步驟為:
1、在企業(yè)管理器中,選擇菜單上的“工具”,再選擇“選項(xiàng)”;
2、在彈出的“SQL Server企業(yè)管理器屬性”窗口中,點(diǎn)擊“高級(jí)”選項(xiàng)卡;
3、在“連接設(shè)置”下的“登錄超時(shí)(秒)”右邊的框中輸入一個(gè)比較大的數(shù)字,如 20。
查詢分析器中也可以在同樣位置進(jìn)行設(shè)置。
二、應(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 對(duì)象,ADO 對(duì)象框架調(diào)用享用的 OLE DB 提供者。為了訪問 SQL Server 數(shù)據(jù)庫(kù),OLE DB 提供了兩種不同的方法:用于 SQL Server 的 OLE DB 提供者以及用于 ODBC 的 OLE DB 提供者。這兩種不同的方法對(duì)應(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)絡(luò)庫(kù)、端口號(hào)等屬性,如下圖所示:
2、如果遇到連接超時(shí)的錯(cuò)誤,我們可以在程序中修改 Connection 對(duì)象的超時(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
%>
3、如果遇到查詢超時(shí)的錯(cuò)誤,我們可以在程序中修改 Recordset 對(duì)象的超時(shí)設(shè)置,再打開結(jié)果集。例如:
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
...三、小結(jié)
本文針對(duì)大部分用戶在使用 SQL Server 過程中常見的連接失敗的錯(cuò)誤,重點(diǎn)討論了在使用 SQL Server 客戶端工具以及用戶開發(fā)的應(yīng)用程序兩種情況下,如何診斷并解決連接失敗的錯(cuò)誤??催^本文以后,相信每一個(gè)讀者都會(huì)對(duì) SQL Server 的連接工作原理、身份驗(yàn)證方式以及應(yīng)用程序開發(fā)等有一個(gè)較為全面而深入的連接。本文中所有的測(cè)試或者示例均在 Windows 2000 Advanced Server + SQL Server 2000 企業(yè)版上通過。
第四篇:JSP連接SQL SERVER問題總結(jié)
首先是SQL 2000數(shù)據(jù)庫(kù)的安裝問題,在此我主要講些關(guān)于SQL 2000的版本與操作系統(tǒng)的兼容性問題:SQL 2000總共有7個(gè)不同版本,適應(yīng)不同等級(jí)用戶的需求。
我試了一下,在XP系統(tǒng)下只有“個(gè)人開發(fā)版”能正常安裝而不出現(xiàn)錯(cuò)誤,所以大家在安裝時(shí)要注意,具體安裝時(shí)的配置參照相關(guān)說明就可以了。
下面說明如何連接到SQL 2000數(shù)據(jù)庫(kù),首先當(dāng)然是要下載JDBC驅(qū)動(dòng)程序,最好去微軟官方網(wǎng)站下載,然后將下載到的三個(gè)JAR包放入你的WEB應(yīng)用的WEB-INF/lib/下。接下來編寫程序進(jìn)行測(cè)試:
/*********************************************** /* /*DBTest.java /* /******************************************* */
import java.sql.*;
public class DBTest {
Connection con;
Statement sta;
ResultSet rs;
String driver;
String url;
String user;
String pwd;
public DBTest()
{
driver = “com.microsoft.jdbc.sqlserver.SQLServerDriver”;;
url
= “jdbc:microsoft:sqlserver:
//localhost:1433;DatabaseName =test”;
//test為數(shù)據(jù)庫(kù)名
user
= “sa”;
pwd
= “sa”;
//請(qǐng)更改為你相應(yīng)的用戶和密碼
init();
}
public void init()
{
try{
Class.forName(driver);
System.out.println(“driver is ok”);
con = DriverManager.getConnection(url,user,pwd);
System.out.println(“conection is ok”);
sta = con.createStatement();
rs = sta.executeQuery
(“select * from room”);
while(rs.next())
System.out.println
(rs.getInt(“roomNum”));
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
//自己替換[]
{
new DBTest();
} }
按道理講,上邊這段代碼應(yīng)該沒錯(cuò),可首先我們來看一下,如果sqlser服務(wù)器沒有升級(jí)到sp3(在使用jdbc時(shí),如果系統(tǒng)是xp或者2003務(wù)必要把sqlserver 升級(jí)到sp3,往上到處都有下的),我們看看運(yùn)行結(jié)果:
driver is ok java.sql.SQLException: [Microsoft] [SQLServer 2000 Driver for JDBC] Error establis hing socket.at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Sou rce)
at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown S ource)
at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:523)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at DbTest.init(DbTest.java:32)
at DbTest.
at DbTest.main(DbTest.java:46)Press any key to continue...出現(xiàn)上邊錯(cuò)誤的主要原因是默認(rèn)的數(shù)據(jù)庫(kù)服務(wù)器端口 1433沒有打開,無法直接連接。如果升級(jí)到sp3則這個(gè)問題可以結(jié)決,我們?cè)賮砜纯瓷?jí)之后,程序運(yùn)行的結(jié)果:
driver is ok conection is ok java.sql.SQLException:
[Microsoft][SQLServer 2000 Driver for JDBC] [SQLServer]對(duì)
象名 ’room’ 無效。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Sour ce)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState
(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecu te(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal
(Unknown So urce)
at com.microsoft.jdbc.base.BaseStatement.executeQuery(Unknown Source)
at DbTest.init(DbTest.java:35)
at DbTest.
at DbTest.main(DbTest.java:46)Press any key to continue...在這兒,用戶已經(jīng)登陸上去,但是卻不能訪問里邊的數(shù)據(jù)表,出現(xiàn)這個(gè)問題的原因在于sa用戶為系統(tǒng)用戶,它雖然能夠登陸數(shù)據(jù)庫(kù),但是test數(shù)據(jù)庫(kù)里邊卻沒有這個(gè)用戶的訪問權(quán)限,所以,我們現(xiàn)在為這個(gè)數(shù)據(jù)庫(kù)重新建立一個(gè)用戶share,建立過程如下:
在test數(shù)據(jù)庫(kù)中選重用戶---〉新建用戶--〉名稱選擇(這一步中有兩個(gè)關(guān)鍵點(diǎn):身份驗(yàn)證選sql身份驗(yàn)證,默認(rèn)數(shù)據(jù)庫(kù)選test)-〉建立新教色share,此時(shí)更改程序,將用戶登陸名和密碼修改一下,重新運(yùn)行程序:
driver is ok conection is ok 1001 1002 1003 1004 1005 1006 Press any key to continue...這次順利通過測(cè)試
其實(shí)這些小問題花了我一個(gè)晚上才解決,真是浪費(fèi)時(shí)間,所以寫下來希望能使遇到類似問題的朋友不要重蹈覆轍,在此提醒大家遇到問題時(shí)多上網(wǎng)查查,多在論壇里問問,這樣你學(xué)到的會(huì)更多,更節(jié)省時(shí)間,更有效率。
總結(jié):Sqlserve 和JDBC 的融合問題,關(guān)鍵涉及到sp3補(bǔ)?。ǘ丝陂_放)還有用戶問題,解決這兩個(gè)問題之后,剩余的便是Sqlserver 操作問題了,還有一點(diǎn)在遠(yuǎn)程操作的時(shí)候,要把Sqlserver 組設(shè)置一下,在安全性里邊亦將身份驗(yàn)證更改為Sqlserve 驗(yàn)證即可。
------------------------------------------------windows xp sp2下jsp連接sql server 2000
注意:由于博客的文本編輯帶有html代碼解釋功能,本文中對(duì)代碼做了一定的改動(dòng),把所有的<改成了#,所有的>改成了$,如果需要用代碼可以用記事本的“替換”功能替換回來即可。基本信息:windows xp sp2、Tomcat5.0、J2SDK1.5、Sql server 2000開發(fā)版
一、安裝JDK 這個(gè)沒有什么好說的,需要注意的是JDK1.5和以前的版本有個(gè)不同點(diǎn),它默認(rèn)的安裝目錄在C:Program FilesJava目錄下,由于路徑名里有空格,所以可能會(huì)給以后的命令行執(zhí)行有一定的影響,并且和以往的習(xí)慣也有些不同,所以建議安裝到C盤目錄下就可以了。我的路徑是C:jdk1.5
二、安裝Tomcat 一路NEXT下來就可以了,注意有會(huì)有一個(gè)設(shè)置用戶名密碼的提示。我是安裝在C:Tomcat 5.0了。
三、安裝SQL Server2000 注意在windos xp下只能裝兩個(gè)版本,一個(gè)是開發(fā)版,另一個(gè)好像是個(gè)人版,記不得了。裝的時(shí)候也基本上是一路NEXT下來,不過有一個(gè)地方要選擇是采用Windows NT驗(yàn)證方式,一種是采用混合驗(yàn)證模式,為了安全,建議采用后者。并且要給超級(jí)管理員sa設(shè)上密碼。最重要的是,不要忘了給SQL Server 2000打上補(bǔ)丁。由于sql server 2000存在漏洞,我們宿舍樓的局域網(wǎng)就因?yàn)橹卸緳C(jī)器太多而造成網(wǎng)絡(luò)擁塞。在windows xp中就把1433端口屏蔽了。要啟用這個(gè)端口,要安裝一個(gè)sql server 2000的sp3補(bǔ)丁。
四、設(shè)置環(huán)境變量
path路徑:在系統(tǒng)變量的path前面加上C:Tomcat 5.0bin;C:jdk1.5bin;classpath路徑.;C:jdk1.5libdt.jar;C:jdk1.5libtools.jar;C:jdk1.5librt.jar;C:jdk1.5;C:Tomcat 5.0commonlib,其中的.代表當(dāng)前路徑,其它的可以簡(jiǎn)單的設(shè)為C:jdk1.5lib,但是最好還是一個(gè)一個(gè)列出來。注意這里你如果在連接數(shù)據(jù)庫(kù)時(shí)用到的是JDBC-ODBC橋接的方式的話,還要把橋接的驅(qū)動(dòng)的路徑加在classpath里面。有一個(gè)細(xì)節(jié),好像在jdk1.5中,這個(gè)驅(qū)動(dòng)不在C:jdk1.5lib下,而是在C:jdk1.5jrelib的rt.jar中,可以適當(dāng)?shù)脑O(shè)置一下或者把這個(gè)文件拷貝到classpath能到達(dá)的地方。
java_home路徑:C:jdk1.5,即是jdk的安裝目錄。
tomcat_home路徑:C:Tomcat 5.0,即是tomcat的安裝目錄。catalina_home路徑:C:Tomcat 5.0 catalina_base路徑:C:Tomcat 5.0,這兩個(gè)環(huán)境變量的作用是可以通過命令行方式來啟動(dòng)和關(guān)閉tomcat,方法是打開命令行提示窗口,鍵入startup就可以啟動(dòng),鍵入shutdown就可以關(guān)閉了。注意不要強(qiáng)行關(guān)閉tomcat,因?yàn)榧热唤o了一個(gè)關(guān)閉的方式必然有它的道理,為了安全起見,還是用shutdown來關(guān)閉較為合適。當(dāng)然不設(shè)置這兩個(gè)環(huán)境變量也可以,只不要啟動(dòng)時(shí)用鼠標(biāo)來從開始菜單啟動(dòng)。
五、建立數(shù)據(jù)庫(kù)表
建立一個(gè)數(shù)據(jù)庫(kù)testdb,在它里面建立一個(gè)表users。里面有兩列,name和password,數(shù)據(jù)類型都取默認(rèn)的char類型就行了。注意在SQL SERVER中表的名字不能為user。否則會(huì)出現(xiàn)錯(cuò)誤。
六、配置數(shù)據(jù)DSN 打開“控制面板->性能與維護(hù)->管理工具->數(shù)據(jù)源”,點(diǎn)擊“系統(tǒng)DSN”,點(diǎn)擊“添加”,數(shù)據(jù)驅(qū)動(dòng)選擇“SQL SERVER”,點(diǎn)擊“完成”,在彈出的對(duì)話框的“名稱”里填入此DSN的名稱,比如test?!懊枋觥笨梢圆惶?,“服務(wù)器”選擇本地,即(local)。點(diǎn)擊“下一步”,將彈出一個(gè)新的對(duì)話框。選擇“使用sql server驗(yàn)證”,在下方填入用戶名和密碼。點(diǎn)擊“下一步”,在新彈出的對(duì)話框的上方,選中“更改默認(rèn)的數(shù)據(jù)庫(kù)為”,在下側(cè)的下拉菜單里選擇你要映射的數(shù)據(jù)庫(kù),這里我們選擇testdb。點(diǎn)擊“下一步”,再點(diǎn)擊“完成”。在新的對(duì)話框下方有個(gè)“測(cè)試數(shù)據(jù)源”的按鈕,點(diǎn)擊它,如果出現(xiàn)“測(cè)試成功”則表示建立DSN成功。點(diǎn)擊完成即可。注意以后在程序中訪問數(shù)據(jù)庫(kù)是根據(jù)這里的系統(tǒng)DSN的名稱來訪問數(shù)據(jù)庫(kù)的,而非真實(shí)的數(shù)據(jù)庫(kù)名,在這里即是通過test而非testdb。
七、寫測(cè)試網(wǎng)頁(yè)文件
這里我們寫一個(gè)簡(jiǎn)單的功能,有兩個(gè)頁(yè)面,第一個(gè)頁(yè)面adduser.htm負(fù)責(zé)與用戶進(jìn)行交互,它可以讓用戶輸入用戶名和密碼,并且提交它,但是它自己不處理,而是由第二個(gè)頁(yè)面文件處理。第二個(gè)頁(yè)面為jdbc.jsp,它接受第一個(gè)頁(yè)面?zhèn)鬟f過來的參數(shù),然后把它插入到users表中,然后把表中所有的用戶都檢索出來并且顯示它。把這兩個(gè)文件放在一個(gè)文件夾jdbc中,在jdbc文件夾中新建一個(gè)文件夾,名稱為WEB-INF,在它里面建一個(gè)web.xml文件,然后把jdbc文件夾放到tomcat的工作目錄C:Tomcat 5.0webapps中。web.xml內(nèi)容
#?xml version=“1.0” encoding=“ISO-8859-1”?$ #!DOCTYPE web-app PUBLIC “-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”$ #web-app$ #display-name$My Web Application#/display-name$ #description$ A application for test.#/description$ #/web-app$ adduser.htm文件內(nèi)容:
#html$ #head$ #title$Add User#/title$ #/head$ #body$ #form method=“POST” action=“jdbc.jsp”$ #p align=“center”$姓名
#input type=“text” name=“name” size=“20”$#/p$ #p align=“center”$密碼
#input type=“password” name=“pwd” size=“20”$#/p$ #p align=“center”$
#input type=“submit” value=“提交” name=“B1”$#/p$ #/form$ #/body$ #/html$
jdbc.jsp文件內(nèi)容: #html$
#head$#title$Add User to DB#/title$#/head$
#%@page import=“java.sql.*”%$
#%@page import=“com.microsoft.jdbc.sqlserver.SQLServerDriver”%$
#%@page import=“com.microsoft.jdbc.*”%$
#%@page import=“java.util.*”%$ #body$
#pre$ #% //Get parameters from request String name,pwd;int num;name=request.getParameter(“name”);pwd=request.getParameter(“pwd”);//add infomation to DB try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();Connection con=DriverManager.getConnection(“jdbc:odbc:test”,“sa”,“l(fā)ike”);Statement stmt=con.createStatement();stmt.executeUpdate(“insert into users values('”+name+“','”+pwd+“')”);//query DB for display all users ResultSet rs=stmt.executeQuery(“select * from users”);//rs.first();out.println(“All user in DB!”);while(rs.next()){
out.print(“user name: ”);
out.print(rs.getString(“name”)+“
password: ”);
out.println(rs.getString(“password”));} num=stmt.getMaxRows();out.println(num);rs.close();stmt.close();con.close();}catch(Exception ex){
out.println(ex.getMessage());
} %$
#/pre$ #/body$ #/html$
八、測(cè)試效果
啟動(dòng)tomcat,啟動(dòng)瀏覽器,在瀏覽器的地址欄中鍵入http://localhost:8080/jdbc/adduser.htm,在出現(xiàn) 的網(wǎng)頁(yè)中填入用戶名密碼,點(diǎn)擊“提交”,即可跳到j(luò)dbc.jsp文件,列出此時(shí)數(shù)據(jù)庫(kù)中所有的用戶。
第五篇:MySQL數(shù)據(jù)庫(kù)連接超時(shí)(Wait_timeout)問題總結(jié)
當(dāng)應(yīng)用程序和數(shù)據(jù)庫(kù)建立連接時(shí),如果超過了8個(gè)小時(shí),應(yīng)用程序不去訪問數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)就會(huì)出現(xiàn)斷掉連接的現(xiàn)象。這時(shí)再次訪問就會(huì)拋出異常.一般的解決方法大多是在數(shù)據(jù)庫(kù)連接字符串中增加“autoReconnect=true ”選項(xiàng)。但是這只對(duì)mysql4以前的版本有效。在最新的mysql中是無效的。其實(shí)要解決這個(gè)問題也有一個(gè)簡(jiǎn)單的方法,就是修改mysql的啟動(dòng)參數(shù)。缺省情況下mysql的timeout時(shí)間是28800秒,正好是8小時(shí),增加一個(gè)0就可以了。決定從根源入手,設(shè)置mysql的wait_timeout為31536000(一年),再來試試。set-variable=wait_timeout=31536000 set-variable=interactive_timeout=31536000 問題得到了解決 想了深入解一下mysql的工作原理
百度了一下Google發(fā)現(xiàn)很多人都出現(xiàn)過這種問題,大多是配置hibernate時(shí)候出的問題,可惜我的項(xiàng)目中沒有使用到hibernate只是簡(jiǎn)單的自己配了一個(gè)連接池,所以綜合了問題的關(guān)鍵所在改了一下數(shù)據(jù)庫(kù)配置,在這里暫且記錄一下,以后備用。
Mysql服務(wù)器默認(rèn)的“wait_timeout”是8小時(shí),也就是說一個(gè)connection空閑超過8個(gè)小時(shí),Mysql將自動(dòng)斷開該 connection。這就是問題的所在。
最近碰到了這個(gè)問題,檢查后發(fā)現(xiàn)數(shù)據(jù)庫(kù)連接池中保存的連接超時(shí)后失效了,下面是官方的解釋 mysql gone-away
從Mysql 5.x的某個(gè)版本之后,MySQL的自動(dòng)關(guān)閉空閑連接的特性被修改了,假如一個(gè)連接空閑到超時(shí)時(shí)間(默認(rèn)28000秒8小時(shí)),再次發(fā)起的Reconnect重新連接請(qǐng)求不會(huì)被接受,需要重新建立新連接,這就導(dǎo)致了SER的重連機(jī)制不能正常工作:SER只會(huì)在需要操作數(shù)據(jù)庫(kù)時(shí)去使用同一個(gè)連接接口,斷開了則發(fā)起重新連接請(qǐng)求,而且這個(gè)問題短期內(nèi)SER也不能夠解決。
下文中將具體講述處理的方法:
1.使用Mysql 4.0或4.1版本,如果沒有用到Mysql 5的一些新特性比如存儲(chǔ)過程觸發(fā)器之類。
2.定時(shí)重啟Mysql服務(wù)器或Ser(由于本問題可能同樣會(huì)影響到其它一些需要Mysql支持的服務(wù)器程序,所以重啟Mysql服務(wù)器為好,但需要檢測(cè)Mysql服務(wù)器不被使用的一個(gè)時(shí)間重啟比較難確定)
3.設(shè)置my.cnf,有mysqld字段內(nèi)增加參數(shù):
[mysqld]port = 3306socket = /tmp/mysql.sockwait_timeout= 500000interactive_timeout = 500000(500000秒約五六天的超時(shí)時(shí)間,可根據(jù)實(shí)際需要選擇一個(gè)數(shù)據(jù)庫(kù)可能空閑的最長(zhǎng)時(shí)間稍大的時(shí)間值。)重啟Mysqld應(yīng)用即可,也可以在執(zhí)行mysqld時(shí)加-o wait_timeout=500000參數(shù)同樣效果。
在MySQL客戶端show variable時(shí)應(yīng)該可以看到最后一條從默認(rèn)的wait_time=28000變成500000了。
(假如重啟Mysqld不生效,可以重啟機(jī)子)