<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

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

      Asp深度揭密(上)

      [摘要]一、Asp基本知識 1.Asp是Active Server Pages的簡稱,是解釋型的腳本語言環境;2.Asp的運行需要Windows操作系統,9x下需要安裝PWS;而NT/2000/XP則需要安...
      一、Asp基本知識

      1.Asp是Active Server Pages的簡稱,是解釋型的腳本語言環境;
      2.Asp的運行需要Windows操作系統,9x下需要安裝PWS;而NT/2000/XP則需要安裝Internet Information Server(簡稱IIS);
      3.Asp和JSP的腳本標簽是“<%%>”,PHP的則可以設定為多種;
      4.Asp的注釋符號是“'”;
      5.使用附加組件,可以擴展Asp的功能。

      例子:

      HelloWorld_1.asp
      <%="Hello,world"%>

      效果:
      Hello,world


      HelloWorld_2.asp
      <%
      for i=1 to 10
      response.write "Hello,world"
      next
      %>

      效果:
      Hello,world
      Hello,world
      Hello,world
      Hello,world
      Hello,world
      Hello,world
      Hello,world
      Hello,world
      Hello,world
      Hello,world

      注意:Asp不區分大小寫;變量無需定義也可使用,轉換方便;語法檢查很松。


      二、Asp內置對象的使用:

      可以使用下面的任何ASP內置對象,而不必在ASP腳本中特別聲明。

      1. Request:

      定義:可用來訪問從瀏覽器發送到服務器的請求信息,可用此對象讀取已輸入HTML表單的信息。

      集:
      Cookies:含有瀏覽器cookies的值
      Form:含有HTML表單域中的值
      QueryString:含有查詢字符串的值
      ServerVariables:含有頭和環境變量中的值

      例子:

      request_url.asp
      <%
      '獲取用戶輸入,并存入變量
      user_id=request.querystring("user_id")
      user_name=request.querystring("user_name")

      '判斷用戶輸入是否正確
      if user_id="" then
      response.write "User_id is null,please check it"
      response.end
      end if
      if user_name="" then
      response.write "User_name is null,please check it"
      response.end
      end if

      '打印變量
      response.write user_id&"<br>"
      response.write user_name
      %>

      效果:
      當訪問http://10.1.43.238/course/request_url.asp?user_name=j時:
      User_id is null,please check it
      當訪問http://10.1.43.238/course/request_url.asp?user_name=j&user_id=my_id時:
      my_id
      j

      思考:變量是如何在URL中傳遞和被Asp頁面獲取的?


      request_form.htm
      <style type="text/css">
      <!--
      .input {background-color: #FFFFFF; border-bottom: black 1px solid;border-left: black 1px solid; border-right: black 1px solid;border-top: black 1px solid; color: #000000;font-family: Georgia; font-size: 9pt;color: midnightblue;}
      a:link {color: #1B629C; text-decoration: none}
      a:hover {color: #FF6600; text-decoration: underline}
      a:visited {text-decoration: none}
      -->
      </style>

      <center>
      <form name="course" action="request_form.asp" method="post">
      User_id:<input type="text" name="user_id" maxlength="20" class="input"><br><br>
      User_name:<input type="text" name="user_name" maxlength="30" class="input">
      </form>
      <br><br>
      <a href="javascript:document.course.submit();"> 提 交 </a>
      </center>

      request_form.asp
      <%
      '獲取用戶輸入,并存入變量
      user_id=request.form("user_id")
      user_name=request.form("user_name")

      '判斷用戶輸入是否正確
      if user_id="" then
      response.write "User_id is null,please check it"
      response.end
      end if
      if user_name="" then
      response.write "User_name is null,please check it"
      response.end
      end if

      '打印變量
      response.write user_id&"<br>"
      response.write user_name
      %>

      注意:form的action的指向,request_form.asp和request_url.asp在源代碼上的區別?

      2. Response:

      定義:用來向瀏覽器回發信息,可用此對象從腳本向瀏覽器發送輸出。

      集:
      Cookies:在瀏覽器中加入一個cookie

      方法:
      End:結束腳本的處理
      Redirect:將瀏覽器引導至新頁面
      Write:向瀏覽器發送一個字符串

      屬性:
      Buffer:緩存一個ASP
      CacheControl:由代理服務器控制緩存
      ContentType: 規定響應的內容類型
      Expires:瀏覽器用相對時間控制緩存
      ExpiresAbsolute:瀏覽器用絕對時間控制緩存

      例子:

      response_redirect.asp
      <%
      '去google看看吧
      response.redirect "http://www2.google.com"
      response.end
      %>


      response_cookies.asp
      <%
      '設置和讀取cookies
      response.cookies("time_now")=now()
      response.write request.cookies("time_now")
      %>

      效果:
      當訪問http://10.1.43.238/course/response_cookies.asp時:
      2002-9-1 16:20:40


      response_buffer.asp
      <%'response.buffer=true%>
      <a href="a">a</a>
      <%response.redirect "request_form.htm"%>

      效果:
      ①.當關閉IIS的緩沖功能,訪問該頁面時出錯
      a
      答復對象 錯誤 'ASP 0156 : 80004005'
      頭錯
      /course/response_buffer.asp,行3
      HTTP 頭已經寫入到 客戶瀏覽器。任何 HTTP 頭的修改必須在寫入頁內容之前。
      ②.當關閉IIS的緩沖功能,去掉文件第一行的注釋,則頁面重定向成功
      ③.當打開IIS的緩沖功能,無論是否去掉文件第一行的注釋,頁面重定向都成功

      3. Server

      定義:可在服務器上使用不同實體函數,如在時間到達前控制腳本執行的時間。還可用來創建其他對象。

      方法:
      CreateObject:創建一個對象實例
      HTMLEncode:將字符串轉化為使用特別的HTML字符
      MapPath:把虛擬路徑轉化成物理路徑
      URLEncode:把字符串轉化成URL編碼的
      ScriptTimeout:在終止前,一個腳本允許運行的秒數

      例子:

      server_htmlencode.asp
      <%
      'html encode
      response.write server.htmlencode("a""time_now")
      %>

      效果:
      a"time_now
      查看源文件時顯示為:a"time_now

      思考:為什么不是a""time_now這種效果?源文件是怎么了?


      server_mappath.asp
      <%
      'mappath
      response.write server.mappath("server_mappath.asp")
      %>

      效果:
      G:\asp_www\test\course\server_mappath.asp

      思考:如何獲取站點根目錄的實際路徑?如何獲取某個目錄的實際路徑?


      server_urlencode.asp
      <%
      'url encode
      response.write server.urlencode("a\time_now")
      %>

      效果:
      a%5Ctime%5Fnow

      4. Application

      定義:用來存儲、讀取用戶共享的應用程序信息,如可以用此對象在網站的用戶間傳送信息,當服務器重啟后信息丟失。

      方法:
      Lock:防止其它用戶訪問Application集
      Unlock:使其它用戶可以訪問Application集

      事件:
      OnEnd:由終止網絡服務器、改變Global.asa文件觸發
      OnStart:由應用程序中對網頁的第一次申請觸發

      例子:

      application_counter.asp
      <%
      '一個使用Application制作的簡單計數器
      Application.lock
      Application("clicks")=Application("clicks")+1
      Application.unlock

      response.write "您是本站第 "&Application("clicks")&" 位訪客!"
      response.write "<br><br>您來自 "&request.servervariables("remote_addr")
      %>

      效果:
      您是本站第 1 位訪客!

      您來自 10.1.43.238

      思考:本例中lock和unlock有何作用?

      5. Session

      定義:存儲、讀取特定用戶對話信息,如可存儲用戶對網站的訪問信息,當服務器重啟后信息丟失。

      方法:
      Abandon:處理完當前頁面后,結束一個用戶會話

      屬性:
      Timeout:用戶會話持續時間(分鐘數)

      事件:
      OnEnd:在Session Timeout時間以外,用戶不再申請頁面觸發該事件
      OnStart:由用戶對網頁的第一次申請時觸發

      例子:

      session_counter.asp
      <%
      '一個使用Session制作的簡單計數器
      session("clicks")=session("clicks")+1

      response.write "您是本站第 "&session("clicks")&" 位訪客!"
      response.write "<br><br>您來自 "&request.servervariables("remote_addr")
      %>

      效果:
      您是本站第 1 位訪客!

      您來自 10.1.43.238

      思考:既然session和application都能做到計數,那它們之間有什么區別?如果要做到滿100重新開始計數如何實現?

      三、使用Asp操作數據庫:

      1.通過ODBC或者OLE方式連接的區別?

      現在有兩種連接數據庫的方法。一方面,可以用ODBC產生一個連接,這種連接與任何有ODBC驅動器的數據庫(即基本上是市場上所有的數據庫)兼容;另一方面,可以用原始OLE DB提供商產生一個連接。

      該用哪個提供商?盡可能用原始OLE DB提供商,因為它提供了對數據更有效的訪問。Microsoft正逐步用OLE DB取代ODBC標準,應該僅僅在沒有原始OLE DB提供商時使用ODBC。

      ⑴.用ODBC方式連接SQL Server:
      ①.配置ODBC
      ②.連接代碼:
      conn_odbc.asp
      <%
      Set Conn = Server.CreateObject("ADODB.Connection")
      'Conn.Open "DSN=course_dsn;UID=course_user;PWD=course_password;DATABASE=course"
      Conn.Open "course_dsn","course_user","course_password"
      %>
      注意:在配置MyDSN時若指定默認數據庫為course則上述代碼作用想同,否則第二行的連接方式更有靈活性,可以指定連接某個數據庫(當然,前提是course_user對這個數據庫有操作權限)。

      ⑵.用OLE方式連接SQL Server:
      conn_ole.asp
      <%
      Set Conn = Server.CreateObject("ADODB.Connection")
      Conn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=10.1.43.238,2433; UID=course_user;PWD=course_password;DATABASE=course"
      %>

      2.操作數據庫:Connection和Recordset

      聯合使用connection和recordset操作數據庫,或者只使用connection操作數據庫。

      例子:

      ⑴.聯合使用connection和recordset操作數據庫

      use_db_1.asp
      <%
      Set conn=Server.CreateObject("ADODB.Connection") '創建連接數據庫的對象
      conn.Open "course_dsn","course_user","course_password" '使用該對象連接數據庫
      Set rs=Server.CreateObject("ADODB.RecordSet") '創建記錄集對象
      rs.Open "select * from user_info",conn,1,1 '使用記錄集對象打開數據庫
      if rs.recordcount>0 then '如果有記錄
      response.write "User_id User_name<br>"
      for i=1 to rs.recordcount '循環讀取所有紀錄
      response.write rs("id")&" "&rs("user_name")&"<br>"
      '向瀏覽器輸出紀錄的字段
      rs.movenext '指針下移一行
      if rs.eof then exit for '如果到達記錄集底部則退出循環
      next
      end if
      %>

      效果:
      User_id User_name
      1 ahyi
      3 test


      ⑵.只使用connection操作數據庫:

      use_db_2.asp
      <%
      Set conn=Server.CreateObject("ADODB.Connection") '創建連接數據庫的對象
      conn.Open "course_dsn","course_user","course_password" '使用該對象連接數據庫
      conn.execute "delete from user_info"
      %>

      效果:
      user_info表中所有數據被刪除

      思考:兩種方式有和區別?各應用于什么場合?

      3.如何使用事務處理、存儲過程和視圖?

      ⑴.使用存儲過程

      ①.定義好存儲過程

      CREATE PROCEDURE [output_1]
      @sid int output
      AS
      set @sid=2

      CREATE PROCEDURE [return_1]
      (@user_name varchar(40),@password varchar(20))
      AS
      if exists(select id from user_info where user_name=@user_name and password=@password)
      return 1
      else
      return 0

      CREATE PROCEDURE [user_info_1]
      (@user_name varchar(40),@password varchar(20))
      AS
      select id from user_info where user_name=@user_name and password=@password

      CREATE PROCEDURE [user_info_2]
      (@user_name varchar(40),@password varchar(20))
      AS
      SET XACT_ABORT ON
      BEGIN TRANSACTION
      delete from user_info where user_name=@user_name and password=@password
      COMMIT TRANSACTION
      SET XACT_ABORT OFF

      CREATE PROCEDURE [user_info_3] AS
      select * from user_info

      ②.在Asp中調用

      use_proc.asp
      <!-- #include virtual="/adovbs.inc" -->
      <%
      Set conn=Server.CreateObject("ADODB.Connection")
      conn.Open "course_dsn","course_user","course_password"

      '使用recordset調用帶兩個輸入參數和返回紀錄集的存儲過程
      'CREATE PROCEDURE [user_info_1]
      '(@user_name varchar(40),@password varchar(20))
      'AS
      'select id from user_info where user_name=@user_name and password=@password
      response.write "普通的調用方法:<br>"
      set rs=server.createobject("adodb.recordset")
      sql="user_info_1 '"&request.querystring("user_name")&"','"&request.querystring("password")&"'"
      rs.open sql,conn,1,1
      response.write rs("id")&"<br>"
      rs.close

      '使用recordset調用無輸入參數,返回紀錄集的存儲過程,可以使用recordcount等屬性
      'CREATE PROCEDURE [user_info_3] AS
      'select * from user_info
      response.write "<br>返回紀錄集,可以使用recordcount等屬性:"
      sql="exec user_info_3"
      rs.open sql,conn,1,1
      for i=1 to rs.recordcount
      response.write "<br>"&rs("user_name")
      rs.movenext
      next
      rs.close
      set rs=nothing

      '使用command調用帶輸出參數的存儲過程
      'CREATE PROCEDURE [output_1]
      '@sid int output
      'AS
      'set @sid=2
      response.write "<br><br>調用帶輸出參數的存儲過程:<br>"
      set cmd=server.createobject("adodb.command")
      cmd.activeconnection=conn
      cmd.commandtext = "output_1"
      cmd.parameters.append cmd.createparameter("@sid",adinteger,adparamoutput)
      cmd("@sid")=10
      cmd.execute()
      bbb=cmd("@sid")
      response.write bbb&"<br>"
      set cmd=nothing

      '使用command調用帶兩個輸入參數和返回值的存儲過程
      'CREATE PROCEDURE [return_1]
      '(@user_name varchar(40))
      'AS
      'if exists(select id from user_info where user_name=@user_name)
      'return 1
      'else
      'return 0
      response.write "<br>調用帶兩個輸入參數和返回值的存儲過程:<br>"
      set cmd=server.createobject("adodb.command")
      cmd.activeconnection=conn
      cmd.commandtype = adcmdstoredproc
      cmd.commandtext = "return_1"
      cmd.parameters.append cmd.createparameter("@return_value",adinteger,adparamreturnvalue)
      cmd.parameters.append cmd.createparameter("@user_name",advarchar,adparaminput,40)
      cmd.parameters.append cmd.createparameter("@password",advarchar,adparaminput,20)
      cmd("@user_name")="tuth"
      cmd("@password")="yyuyu"
      cmd.execute()
      rrr=cmd("@return_value")
      response.write rrr
      set cmd=nothing

      conn.close
      set conn=nothing
      %>

      效果:
      訪問http://10.1.43.238/course/use_proc.asp?user_name=ahyi&password=ttt時,出現如下

      普通的調用方法:
      12

      返回紀錄集,可以使用recordcount等屬性:
      ahyi
      tet
      tuth

      調用帶輸出參數的存儲過程:
      2

      調用帶兩個輸入參數和返回值的存儲過程:
      1

      注意:若存儲過程無參數,則調用的sql語句直接為存儲過程名,一個參數為“存儲過程名 參數”,若是多個參數,則“存儲過程名 參數1,參數2,……,參數n”;如果在sql語句中加入exec,則在返回的記錄集中可以使用recordcount等屬性;如果想獲得存儲過程的返回值或輸出參數,可以使用command對象。

      ⑵.使用事務處理

      ①.Asp內嵌的事務支持

      例子:
      use_transaction_1.asp
      <%
      'Asp中使用事務
      Set conn=Server.CreateObject("ADODB.Connection")
      conn.Open "course_dsn","course_user","course_password"
      conn.begintrans '開始事務

      sql="delete from user_info"
      set rs=server.createobject("adodb.recordset")
      rs.open sql,conn,3,3
      if conn.errors.count>0 then '有錯誤發生
      conn.rollbacktrans '回滾
      set rs=nothing
      conn.close
      set conn=nothing
      response.write "交易失敗,回滾至修改前的狀態!"
      response.end
      else
      conn.committrans '提交事務
      set rs=nothing
      conn.close
      set conn=nothing
      response.write "交易成功!"
      response.end
      end if
      %>

      ②.數據庫級的事務

      i.創建存儲過程

      CREATE PROCEDURE [user_info_2]
      (@user_name varchar(40),@password varchar(20))
      AS
      SET XACT_ABORT ON
      BEGIN TRANSACTION
      delete from user_info where user_name=@user_name and password=@password
      COMMIT TRANSACTION
      SET XACT_ABORT OFF

      ii.在Asp中調用

      use_transaction_2.asp
      <%
      Set conn=Server.CreateObject("ADODB.Connection")
      conn.Open "course_dsn","course_user","course_password"

      sql="user_info_2 '"&request.querystring("user_name")&"','"&request.querystring("password")&"'"

      set rs=server.createobject("adodb.recordset")
      rs.open sql,conn,1,1
      set rs=nothing
      conn.close
      set conn=nothing
      %>

      討論:兩種方式的優劣?

      ⑶.使用視圖
      在數據庫中定義好視圖之后,在Asp中如同使用一個表一樣來使用視圖

      4.一個數據庫分頁的例子

      db_page.asp
      <%
      on error resume next
      Set conn=Server.CreateObject("ADODB.Connection") '創建連接數據庫的對象
      conn.Open "course_dsn","course_user","course_password" '使用該對象連接數據庫
      set rs=server.createObject("adodb.recordset")
      sql="select * from user_info order by id desc"
      rs.open sql,conn,1,1

      if rs.recordcount>0 then '如果有記錄
      rs.pagesize=2 '每頁最多顯示2條紀錄
      '從URL獲取當前要顯示的頁
      page=cint(request("page"))
      '頁面參數異常處理
      if page="" then page=1
      if page<1 then page=1
      if page>= rs.pagecount then page=rs.pagecount
      rs.absolutepage=page '當前頁為page參數指定的頁
      for i=1 to rs.pagesize '根據pagesize參數的大小循環顯示當前頁中的紀錄
      response.write "User_id:"&rs("id")&"<br>"
      response.write "User_name:"&rs("user_name")&"<br><br>"
      rs.movenext '紀錄指針下移
      if rs.eof then exit for '如果到達紀錄集底部則退出循環
      next
      end if

      '顯示翻頁按鈕
      if page>1 then
      response.write "<a href="&request.servervariables("document_name")&"?page=1>第一頁</a> "
      response.write "<a href="&request.servervariables("document_name")&"?page="&(page-1)&">上一頁</a> "
      end if
      if page<>rs.pagecount then
      response.write "<a href="&request.servervariables("document_name")&"?page="&(page+1)&">下一頁</a> "
      response.write "<a href="&request.servervariables("document_name")&"?page="&rs.pagecount&">最后一頁</a> "
      end if
      response.write"頁碼:"&page&"/"&rs.pagecount

      '關閉對象,釋放內存
      rs.close
      set rs=nothing
      conn.close
      set conn=nothing
      %>

      思考:分頁過程中使用了哪些額外的屬性?





      日韩精品一区二区三区高清