如何避免使用DSN串連資料庫

來源:互聯網
上載者:User
串連資料庫 是否仍舊在使用ODBC系統或檔案DSN串連資料庫?請用OLEDB提供者代替它,這是一種速度更快而且不需要使用DSN的數
據庫串連技術。使用OLEDB提供者,你不必再為了建立系統DSN懇求ISP(或資料庫管理員/網站管理員),也不必為了網站
檔案位置的變化而修改配置。

   問:

   我看到過大量通過資料資源名字(DSN)串連資料庫的例子,不過我現在想不通過DSN串連資料庫。在ASP中可以實現
這一點嗎?能否舉幾個具體的例子說明?我希望新的串連方法不依賴於系統DSN,但又可以在資料庫連接串中指定驅動程
序、伺服器名字、資料庫、資料庫帳號和密碼。

   答:

   如果你使用的是SQL Server 7,請使用下面的資料庫連接串:
  
strConnString = "DSN='';DRIVER={SQL SERVER};" & _
"UID=myuid;PWD=mypwd;" & _
"DATABASE=MyDb;SERVER=MyServer;"



   其中最重要的參數在於“DRIVER=”部分。如果你希望繞過ODBC,直接通過OLEDB訪問SQL Server(一般來講這種方法
速度更快),請使用下面這種串連串:   
strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" & _
"Persist Security Info=True;User ID=myuid;" & _
"Initial Catalog=mydbname;" & _
"Data Source=myserver;Connect Timeout=15"



   如果你要使用資料庫連接串,但又不熟悉OLEDB提供者的串連串文法,請使用Visual Basic的資料環境設計器或ADO數
據控制項建立一個,然後把它拷貝出來用於ADO連線物件就可以了。在立即視窗中,輸入命令?
dataenvironment1.connection1.ConnectionString可以得到串連串的代碼。請注意Microsoft Access串連串的文法有所不
同,參見《Syntax for DSN-Less Connection for MS Access》

   參見:《ASP效能最佳化指南》中的資料庫連接部分。

2、記錄集中記錄總數的計算
1062


   剛開始在ASP頁面中使用記錄集的時候可能經常會遇到這個問題。如果你想訪問記錄集中的資料,首先必須保證記錄
集中確實包含資料。請記住,如果記錄集中沒有資料,系統將顯示非常不友好的執行階段錯誤資訊。你可以使用下面的代碼
去解決這種問題。

   問:

   我已經有數年的VB經驗,但剛剛開始學習ASP和VBScript。現在我要開啟一個Access資料庫,計算其中的記錄總數並
在Web頁面中顯示這些資訊。資料庫的名字叫sean.mdb,其中包含一個people表,表中有三個記錄。然而,當我運行指令碼時
它總是說有-1個記錄。

   是否可以告訴我下面的代碼什麼地方出錯了?   
< %

Set objConn = Server.CreateObject("ADODB.Connection")
Set objRst = Server.CreateObject("ADODB.Recordset")

objConn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=
" & Server.Mappath("seannewelldbsean.mdb"))

strSQL = "SELECT * FROM people"

objRst.Open strSQL, objConn

Response.write( "< P >" & strSQL & "< /P >" )
Response.write("< H2 >There are " & objRst.RecordCount &
" People in the database< /H2 >")

If objRst.RecordCount > 0 Then
objRst.MoveFirst
Do While Not objRst.EOF
Response.write( "Name = " & objRst.fields(0) )
objRst.MoveNext
Loop
else
Response.write( "It's EMPTY!" )
End If

objRst.Close
Set objRst = Nothing
objConn.Close
Set objConn = Nothing
% >



   答:

   在低版本的MDAC中RecordCount屬性返回-1。請在你的伺服器上把MDAC檔案更新到最新的版本,最新的MDAC檔案可以
在www.microsoft.com/data找到。

   如果Web伺服器由ISP管理而你又無權配置它,無法升級MDAC檔案,那麼必須修改代碼。

   原來使用下面的代碼檢查記錄集中是否有記錄:   
If objRst.RecordCount > 0 Then ...



   請改用下面的代碼:   
If objRst.BOF and objRst.EOF Then
' 記錄集為空白
Else
Do While not objRst.EOF
' 處理記錄集
objRst.MoveNext
Loop
End If



   2000年06月30日更新,新西蘭的Daryl Egarr說:

   可以看出,讀者提問中的代碼並沒有錯誤。問題在於“在低版本的MDAC中RecordCount屬性返回-1”,這一判斷本身
並沒有錯誤,然而從提問內容來看作者不應該作出這種假定,因為原問題中沒有任何一行代碼意味著使用了低版本的
MDAC。

   作者考慮問題的方向不對,問題的要點在於並非所有的遊標類型都支援所有的屬性和方法(不管採用哪種資料庫系
統)。問題中代碼出現錯誤的真正原因在於使用預設的CursorLocation時:   
Recordset.CursorLocation = adUseServer

   RecordCount屬性只有在記錄集的CursorType為1或者3(即adOpenKeyset,adOpenStatic)時才是可用的。出現錯誤
的代碼沒有指定CursorType,也就是使用了0類型的遊標(即adOpenForwardOnly,這是速度最快的遊標類型),此時對
RecordCount的引用將一直返回0。

   解決問題的方法很簡單,只要把原來代碼中的:   
objRst.Open strSQL, objConn

   改成:   
objRst.Open strSQL, objConn ,1



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。