明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

基于ASP的編程經常見問題

[摘要]基于ASP的編程常見問題   基于ASP技術開發(fā)Internet/Intranet上的MIS系統(tǒng)是非常方便的,首先是它借用了ADO技術和概念,同時通過ODBC訪問數據庫,達到了充分的靈活性和多平臺性,另外,由于ASP利用VBS和JS腳本語言,也保證大多數開發(fā)者很快進入開發(fā)過程,減少了學習...
   基于ASP的編程常見問題
  
    基于ASP技術開發(fā)Internet/Intranet上的MIS系統(tǒng)是非常方便的,首先是它借用了ADO技術和概念,同時通過ODBC訪問數據庫,達到了充分的靈活性和多平臺性,另外,由于ASP利用VBS和JS腳本語言,也保證大多數開發(fā)者很快進入開發(fā)過程,減少了學習的過程。
    但是,由于ASP是基于Internet/Intranet方式的,它和傳統(tǒng)的C/S結構畢竟有所不同,這樣在開發(fā)中也要注意一些細節(jié)問題。本文講述常見的一些問題,并給出解決方法。
  
  問題描述
  
  A. 無法正確運行ASP
  
    當我們建立了一個ASP文件,并且符合語法時,通過瀏覽器輸入以下地址,或通過資源管理器打開瀏覽:
  c:\inetpub\wwwroot\a.asp
  將出現無法運行的錯誤,并提示權限不對或文件無法訪問,原因是,ASP文件首先要求站點是具備“執(zhí)行(腳本)”屬性的;然后要求按照URL格式輸入地址,而不是DOS格式,所以,請改正這兩個錯誤。
  
  B. 程序移動位置后,無法訪問數據庫
  
    這種錯誤首先在ODBC,如果ODBC數據源設置正確,那么需要注意ASP中打開數據庫的命令:Conn.Open 的參數是否正確。如果正確,則需要注意是否使用了global.asa文件,該文件是ASP連接數據庫的配置文件,該文件內容如下:
  <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
  'You can add special event handlers in this file that will get run automatically when special Active Server Pages events
  'occur. To create these handlers, just create a subroutine with a name from the list below that corresponds to the event
  'you want to use. For example, to create an event handler for Session_OnStart, you would put the following code into this
  'file (without the comments):
  'EventName Description
  'Session_OnStart Runs the first time a user runs any page in your application
  'Session_OnEnd Runs when a user's session times out or quits your application
  'Application_OnStart Runs once when the first page of your application is run for the first time by any user
  'Application_OnEnd Runs once when the web server shuts down
  
  </SCRIPT>
  <SCRIPT LANGUAGE=VBScript RUNAT=Server>
  Sub Session_OnStart
  '==Visual InterDev Generated - DataConnection startspan==
  '--Project Data Connection
  Session("Customers_ConnectionString")="DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=;APP=Microsoft(R)Developer Studio;WSID=GREGLEAK;DATABASE=Customers"
  Session("Customers_ConnectionTimeout") = 15
  Session("Customers_CommandTimeout") = 30
  Session("Customers_RuntimeUserName") = "sa"
  Session("Customers_RuntimePassword") = ""
  '==Visual InterDev Generated - DataConnection endspan==
  End Sub
  </SCRIPT>
  要注意其中的DSN,其中SERVER后一定是數據庫服務器名稱,如果該處不正確,需要改正。另外是UID和PWD是否正確;還有,如果OPEN命令使用了SESSION,則需要注意
  Session("Customers_RuntimeUserName") = "sa"
  Session("Customers_RuntimePassword") = ""
  是否正確。
  
  C. RUNAT使用問題
  
    在腳本語法中,有RUNAT參數,表示該腳本是運行在服務器上還是客戶機上。如果有RUNAT=SERVER則腳本運行在服務器上,由ASP解釋程序來解釋執(zhí)行,并將結果傳遞給WWW服務器;否則就是運行在客戶機上,由瀏覽器的腳本虛擬機解釋執(zhí)行,這時,和一般的腳本沒有區(qū)別。所以,一定要注意ASP語法中的命令,如:REQUEST,QUERYSTRING,WRITE等命令或對象必須在具備RUNAT參數的腳本運行;而訪問HTML的FORM對象的腳本一定沒有RUNAT參數,因為HTML的FORM是客戶機方面的對象,服務器無法訪問。
  
  D. 無法向SQL SERVER插入日期字段
  
    如果遇到必須使用美國日期格式插入日期的情況,則需要在服務器的區(qū)域設置上設置中國長日期格式,請?zhí)貏e注意,ASP是在服務器上運行的,生成的HTML結果傳遞給瀏覽器,所以,所有格式設置必須在服務器上。
  
  E. 如何向客戶機推送提示信息
  
    如果在服務器上判斷訪問錯誤,如注冊失敗、無權操作記錄等需要提示用戶的信息。這個信息需要推送到客戶機上,并出現提示窗口,這是經常遇到的問題。這個時候,必須使用動態(tài)頁面的方式,因為錯誤是在服務器上判斷的,而提示是在瀏覽器上出現的。我們 可以使用下面的ASP來推送錯誤:
  on error resume next
  conn=server.createobject("adodb.connection")
  conn.open "pubs","wlf",""
  '如果注冊失敗則錯誤數大于0
  if conn.errors.count? then
  ‘以下代碼生成客戶機上的腳本語言,提供給瀏覽器執(zhí)行
  response.write "<script language=javascript>" & chr(13)
  response.write "{" & chr(13)
  response.write " window.alert("您無權訪問數據庫!")" & chr(13)
  response.write "}" & chr(13)
  response.write "</script >" & chr(13)
  end if
  
  F. 客戶機盡量使用固定IP地址
  
     由于ASP連接數據庫是定時的,默認是:
  Session("Customers_ConnectionTimeout") = 15
  Session("Customers_CommandTimeout") = 30
  兩個設置決定的時間,超時后自動斷開連接,所以,當刷新頁面重新執(zhí)行ASP代碼時,如果IP分配時間不夠(動態(tài)IP分配需要時間,比靜態(tài)長很多。,可能無法連接上,則出現錯誤信息,所以盡量用靜態(tài)IP地址。
  
  總結
  
    使用ASP編程是很方便的。由于ADO跨越了ODBC,形成具備多線程處理能力的數據庫操作方式,并且是在服務器上運行,雖然增加了服務器的壓力,好在現在的服務器(哪怕是PC服務器)處理能力都非常強,這樣反而發(fā)揮了服務器的效率。另外,由于ASP可以和ActiveX控件進行良好的接口,也使開發(fā)者容易根據自己的需要擴充程序,并直接建立在ASP編程環(huán)境上,唯一需要注意的是,一定要以Internet/Intranet的思路設計和編寫程序,否則將事倍功半。