ASP 3.0連接SQL Server 2005 Express 無法連接問題
前言:本文章將解決兩項在預設情況下安裝SQL SERVER2005後,ASP3.0(沒錯,就是那個沒有.NET的老梗ASP)無法連接資料庫問題問題一:用ASP連接SQL SERVER2005 EXPRESS出現下列錯誤訊息Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80004005'
SQL Server 不存在或拒絕存取。問題二:成功連接後,即使已在SQL SERVER新增使用者,連接時會出現以下訊息使用者將無法與受信任的 SQL Server 連接相關聯問題一解決方法:
原本使用者使用像這樣的連接字串
Set cnn=Server.CreateObject("ADODB.Connection")
strcon="Driver={SQL Server};Server=127.0.0.1;Database=DB;Uid=myusername;Pwd=12345678;"
在這樣的連接下,出現了SQL Server不存在的錯誤訊息,於是,我們把127.0.0.1改成了像這樣的名稱VF-9\SQLEXPRESS
(註:VF-9為機器的名稱,請改成你自己的機器名稱)
如此,問題一即可順利解決,於是問題二就跟著出現了,明明已經有新增使用者,權限也沒有問題,卻出現無法登入的情況
問題二的解決方法:
到SQL Server 2005的設定屬性畫面之後,找到『安全性』,將『伺服器驗證』選項,從『Windows驗證』改為『SQL Server 與Windows驗證』
重新啟動SQL Server服務即可。
系統平台:
OS: Windows XP SP3 繁體中文版
Web Server : IIS 5
Database Server : Microsoft SQL Server 2005 Express Edition
Tool : SSMSE 9.0 這種本來就連不上吧,改成這樣才對
strcon="Driver={SQL Server};Server=localhost\SQLEXPRESS;Database=DB;integrated security=sspi;"
或是
strcon="Driver={SQL Server};Server=tcp:127.0.0.1\sqlexpress,1234;Database=DB;integrated security=sspi;"
我都是用這種方式連結,SSPI是使用Windows驗證的意思,Windows驗證安全性也比較高
ODBC連結和ASP版本沒什麼關係才對,有支援ODBC Drivers就夠了
[ 本帖最後由 sosie 於 2009-8-27 00:51 編輯 ] 下列表格列出 ConnectionString 內關鍵字數值的有效名稱。
關鍵字
Default
說明
Application Name
N/A
應用程式的名稱,如果沒有提供應用程式名稱,則為 '.NET SQLClient Data Provider'。
Async
'false'
如果為 true,啟用非同步作業支援。可辨認的值為 true、false、yes 和 no。
AttachDBFilename
-或-
extended properties
-或-
Initial File Name
N/A
主要資料庫檔案的名稱,包括可附加資料庫的完整路徑名稱。只有具有 .mdf 副檔名的主要資料檔案才能支援 AttachDBFilename。
如果主要資料檔案屬於唯讀,附加動作將會失敗。
藉由使用 DataDirectory 替換字串,路徑可以是絕對或相對路徑。如果使用 DataDirectory,則資料庫檔案必須存在於替換字串指向之目錄的子目錄。
http://i.msdn.microsoft.com/f28szy5b.alert_note%28zh-tw,VS.90%29.gif注意事項:不支援遠端伺服器、HTTP 和 UNC 路徑名稱。
必須使用關鍵字 'database' (或其中一個別名 (Alias)) 指定資料庫名稱,如下所示:
"AttachDbFileName=|DataDirectory|\data\YourDB.mdf;integrated security=true;database=YourDatabase"
如果記錄檔出現在與資料檔案相同的目錄中,而且在嘗試附加主要資料檔案時使用了 'database' 關鍵字,便會產生錯誤。在這種情況下,請移除該記錄檔。附加資料庫之後,便會自動依據實體路徑來產生新的記錄檔。
Connect Timeout
-或-
Connection Timeout
15
在終止嘗試並產生錯誤之前,要等待伺服器連接的時間長度 (以秒為單位)。
Context Connection
'false'
如果應該建立與 SQL Server 的同處理序連接,則為 true。
Current Language
N/A
SQL Server 語言資料錄名稱。
Data Source
-或-
Server
-或-
Address
-或-
Addr
-或-
Network Address
N/A
要連接 SQL Server 的執行個體之名稱或網路位址。可在伺服器名稱後指定通訊埠編號:
server=tcp:servername, portnumber
指定本機執行個體時,永遠使用 (local)。若要強制通訊協定,請加入下列其中一個前置詞:
np:(local),tcp:(local), lpc:(local)
http://i.msdn.microsoft.com/f28szy5b.alert_note%28zh-tw,VS.90%29.gif注意事項:ADO.NET 2.0 不支援 SQL Server 2000 (含) 以下版本在共用記憶體上使用非同步的命令。不過,您可以強制使用 TCP 來取代共用記憶體,方法是在連接字串的伺服器名稱前面加上 tcp: 前置字元,或是使用 localhost。
Encrypt
'false'
當為 true 時,如果伺服器已安裝憑證,則 SQL Server 會在用戶端與伺服器之間的所有資料上使用 SSL 加密 (Encryption)。可辨認的值為 true、false、yes 和 no。
Enlist
'false'
true 表示,SQL Server 連接集區工具會在建立執行緒的目前交易內容中自動登記連接。
Failover Partner
N/A
容錯移轉合作夥伴的名稱,其中設定資料庫鏡像。
.NET Framework 1.0 或 1.1 版不支援 Failover Partner 關鍵字。
Initial Catalog
-或-
Database
N/A
資料庫的名稱。
Integrated Security
-或-
Trusted_Connection
'false'
如果為 false,則會在連接中指定使用者 ID 和密碼。如果為 true,則會使用目前的 Windows 帳戶認證進行驗證。
可辨認的值為 true、false、yes、no 和 sspi (建議使用),其相當於 true。
MultipleActiveResultSets
'false'
如果為 true,則應用程式可維護 Multiple Active Result Set (MARS)。如果為 false,則應用程式必須處理或取消一個批次的所有結果集,才能夠執行該連接的其他批次。
辨認的值為 true 和 false。
.NET Framework 1.0 或 1.1 版不支援該關鍵字。
Network Library
-或-
Net
'dbmssocn'
網路程式庫用來建立 SQL Server 的執行個體的連接。支援的值包含:
dbnmpntw (具名管道)
dbmsrpcn (多重通訊協定、Windows RPC)
dbmsadsn (Apple Talk)
dbmsgnet (VIA)
dbmslpcn (共用記憶體)
dbmsspxn (IPX/SPX)
dbmssocn (TCP/IP)
Dbmsvinn (Banyan Vines)
對應的網路 DLL 必須安裝在您連接的系統上。如果您沒有指定網路而使用本機伺服器 (例如 "." 或"(local)"),則會使用共用記憶體。在這個範例中,網路程式庫是 Win32 Winsock TCP/IP (dbmssocn),1433則是使用的通訊埠。
Network Library=dbmssocn;Data Source=000.000.000.000,1433;
Packet Size
8192
用來與 SQL Server 的執行個體通訊的網路封包之大小 (以位元組為單位)。
Password
-或-
Pwd
N/A
正在登入之 SQL Server 帳戶的密碼。不建議使用。為了維持高安全性等級,強烈建議您改為使用 Integrated Security 或 Trusted_Connection 關鍵字。
Persist Security Info
'false'
當設定為 false 或 no (建議使用) 時,如果連接開啟或曾經處於開啟狀態,則不會將安全性相關資訊 (如密碼) 當做連接的一部分傳回。重設連接字串會將所有包含密碼的連接字串值重設。可辨認的值為 true、false、yes 和 no。
Replication
'false'
如果使用連接時支援複寫,則為 true。
Transaction Binding
隱含解除繫結
控制與已登記之 System.Transactions 交易的連接關聯。
可能值為:
Transaction Binding=Implicit Unbind;
Transaction Binding=Explicit Unbind;
隱含解除繫結會造成連接在結束時與交易中斷。在中斷連結之後,會在自動認可模式中執行其他的連接要求。如果在交易為作用中時執行要求,便不會檢查 System.Transactions.Transaction.Current 屬性。在交易結束之後,會在自動認可模式中執行其他要求。
明確解除繫結會造成連接與交易保持在附加狀態,除非連接關閉或呼叫明確的 SqlConnection.TransactionEnlist(null)。如果 Transaction.Current 不是已登記的交易或如果已登記的交易不是作用中時,便會擲回 InvalidOperationException。
TrustServerCertificate
'false'
設為 true 時,SSL 會用來加密通道,但略過驗證信任的憑證鏈結查核。如果 TrustServerCertificate 設定為 true 且 Encrypt 設定為 false,則不會加密通道。可辨認的值為 true、false、yes 和 no。如需詳細資訊,請參閱連接字串語法 (ADO.NET)。
Type System Version
N/A
字串值,表示應用程式預期的型別系統。可能的值包括:
Type System Version=SQL Server 2000;
Type System Version=SQL Server 2005;
Type System Version=SQL Server 2008;
Type System Version=Latest;
設為 SQL Server 2000 時,會使用 SQL Server 2000 型別系統。連接到 SQL Server 2005 執行個體時,會執行下列轉換:
XML 轉換成 NTEXT
UDT 轉換成 VARBINARY
VARCHAR(MAX)、NVARCHAR(MAX) 和 VARBINARY(MAX) 分別轉換成 TEXT、NEXT 和 IMAGE。
設為 SQL Server 2005 時,會使用 SQL Server 2005 型別系統。對於目前版本的 ADO.NET,不執行任何轉換。
設為 Latest 時,使用這個主從組能處理的最新版本。當用戶端和伺服器元件更新時,這也會自動更新。
User ID
N/A
SQL Server 登入帳戶。不建議使用。為了維持高安全性等級,強烈建議您改為使用 Integrated Security 或 Trusted_Connection 關鍵字。
User Instance
'false'
值,指出是否將連接從預設 SQL Server Express 執行個體,重新導向至在呼叫端帳戶下執行之執行階段啟始的執行個體。
Workstation ID
本機電腦名稱
連接至 SQL Server 的工作站名稱。
下列表格列出 ConnectionString 內連接共用值的有效名稱。如需詳細資訊,請參閱 SQL Server 連接共用 (ADO.NET)。
Name
Default
說明
Connection Lifetime
0
當連接傳回集區時,其建立時間會與目前時間相比較,如果該時間 (以秒為單位) 超過 Connection Lifetime 指定的值,則會終結連接。這有助於在叢集組態中強制進行執行中伺服器和剛上線伺服器之間的負載平衡 (Load Balancing)。
零 (0) 的值會導致共用連接產生連接上限逾時的狀況。
Enlist
'true'
如果為 true,集區工具會在建立執行緒的目前交易內容中自動登記連接。可辨認的值為 true、false、yes 和 no。
Load Balance Timeout
0
在遭到終結之前,連接在連接集區中存在的最短時間 (以秒為單位)。
Max Pool Size
100
集區中允許連接的最大數目。
Min Pool Size
0
集區中允許連接的最小數目。
Pooling
'true'
如果為 true,則會從適當的集區中提取 SQLConnection 物件,或在必要時建立這個物件並將其加入適當的集區。可辨認的值為 true、false、yes 和 no。
設定需要布林值的關鍵字或連接共用值時,您可以使用 'yes' 代替 'true' 以及 'no' 代替 'false'。整數值會以字串來表示。 原帖由 sosie 於 2009-8-27 00:19 發表 http://dqno1.org/dqno1discuz/images/common/back.gif
這種本來就連不上吧,改成這樣才對
strcon="Driver={SQL Server};Server=localhost\SQLEXPRESS;Database=DB;integrated security=sspi;"
或是
strcon="Driver={SQL Server};Server=tcp:127.0.0.1\sqlexpress,1234;Data ...
連接語法都是抄來的
= =
老舊的連接語法的確都是像"Server=localhost" 這樣
不過那個sspi改為Windows 驗證的使用方法是...
我需要新增一個Windows用戶還是?????
回復 4# ENIX.DQ 的帖子
當你用SSMSE不就是用windows驗證按下連接直接登入的嗎?,應該不是多一道手續加入使用者帳戶再打帳密登入的吧當sqlserver安裝時他會將windows的帳戶加入權限成為sql的管理者,也就是你登入windows時就同時取得sql的帳密了,因此不用再輸入帳號密碼,帳號密碼就是XP(或VISTA其他系統)的帳密,sql驗證就需要將帳密寫在原始碼裡,這種安全性也就較低、維護也較不易,資料庫管理盡量和程式脫離,當你asp一多,帳密改掉後不就頭大嗎?
sspi只是建議使用字詞 ,連結字串裡用 Integrated Security =yes或是 Integrated Security =true也是一樣,加入此字串後就會用windows驗證登入,當然你硬要用false然後用把windows的帳密寫在asp裡也可以登入
-----------------------------------功能說明-------------------------------------------------------
Integrated Security-或- Trusted_Connection
------------------------------------------------------------------------------------------------------
如果為 false,則會在連接中指定使用者 ID 和密碼。如果為 true,則會使用目前的 Windows 帳戶認證進行驗證。可辨認的值為 true、false、yes、no 和 sspi (建議使用),其相當於 true。
-----------------------------------------------------------------------------------------------------
[ 本帖最後由 sosie 於 2009-8-28 00:12 編輯 ] 這果然是很詭異的一件事情
今天我把系統移到Windows Server2008上頭(原本是在XP的IIS上)
同樣的程式碼卻出現無法連接伺服器的狀況
原本使用Server=localhost\SQLEXPRESS可以連接
現在得改用『Server=tcp:127.0.0.1,1234』這種格式
= =神奇! 原帖由 ENIX.DQ 於 2009-9-1 19:11 發表 http://dqno1.org/dqno1discuz/images/common/back.gif
這果然是很詭異的一件事情
今天我把系統移到Windows Server2008上頭(原本是在XP的IIS上)
同樣的程式碼卻出現無法連接伺服器的狀況
原本使用Server=localhost\SQLEXPRESS可以連接
現在得改用『Server=tcp:127.0.0.1, ...
因為sql名稱不是SQLEXPRESS吧,這個名稱是安裝的時後設定的
頁:
[1]