<!-- 蛙蛙推薦:如何做一個高效的ASP數據庫操作程序 一般情況下我們做的ASP數據庫程序都是ADO+ACCESS,并且都是使用一些查詢字符串加記錄集來操作數據庫,最多也只使用了connection和recordset兩個對象以及它們的幾個常用的屬性和方法,其實ADO的使用遠不僅這些,我們還有command對象和Parameters對象沒有用呢,而這兩個對象用好了會提高你整個ASP程序的性能. 我這里寫了一個歌詞管理程序,用的是sqlserver數據庫和存儲過程實現的,(這里沒有用參數化查詢,也正是為了演示ado對sqlserver和存儲過程的用法). 希望大家能從我的示例代碼中學到新的東西,嘿嘿. 注意:我把示例代碼里面的asp邊界符(就是尖括號加上一個百分號的那個標識)替換成了全角中文的尖括號,因為很多論壇會過濾這個符號,再你復制后記著把它替換成英文半角的. --> <!-- 數據庫腳本 --> <!-- 先在sqlserver里新建個數據庫song然后在查詢分析器里選擇這個數據庫,賦值下面的t-sql代碼執行批查詢,最后把這個頁放在虛擬目錄下,并把其中的數據庫連接字符串修改成適合你的數據庫配置的字符串,運行本頁就可以了 --> <!-- if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[check_song]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[check_song] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[insert_song]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[insert_song] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_song_list]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_song_list] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_wawa_song]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_wawa_song] GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[wawa_song]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[wawa_song] GO
CREATE TABLE [dbo].[wawa_song] ( [song_id] [int] IDENTITY (1, 1) NOT NULL , [song_name] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL , [song_content] [varchar] (4000) COLLATE Chinese_PRC_CI_AS NOT NULL , [song_author] [char] (20) COLLATE Chinese_PRC_CI_AS NULL , [author_id] [int] NULL ) ON [PRIMARY] GO
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO
/* 過程check_song,通過@song_name變量來查詢數據表中是否有重復的記錄,如果有則設定@state這個輸入參數的值為1,該值直接影響到addnew過程的運行 */ create proc check_song @song_name char(40), @state int output as begin if exists(select song_name from wawa_song where song_name=@song_name) set @state = 1 else set @state = 0 end
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO
/* 過程insert_song */ CREATE proc insert_song @song_name char(40), @song_content varchar(4000), @song_author char(20) as begin declare @state int exec check_song @song_name,@state output if @state = 0 begin begin tran insert into wawa_song(song_name,song_content,song_author) values (@song_name,@song_content,@song_author) commit tran raiserror('%s添加成功!',16,1,@song_name) end else begin raiserror ('用戶名%s已存在!',16,1,@song_name) return end end
GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO
CREATE PROCEDURE [p_song] AS select * from wawa_song order by song_id desc GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO
create proc p_wawa_song @id int as select song_id,song_name,song_author,song_content from wawa_song where song_id=@id GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO
--> <!-- /數據庫腳本 --> <!-- 數據庫連接 --> 《% Dim conn,strconn Set conn = Server.CreateObject("ADODB.Connection") '如果你的數據庫的連接字符串和下面一句不符合,可以修改下句代碼來適合你的數據庫配置 strconn="Driver={sql server};server=192.168.0.110;database=song1;uid=sa;pwd=sa;" conn.Open strconn %》 <!-- /數據庫連接 --> <!-- 獲取本頁地址 --> 《% Dim fileName,postion fileName = Request.ServerVariables("script_name") postion = InstrRev(fileName,"/")+1 fileName = Mid(fileName,postion) %》 <!-- /獲取本頁地址 --> <!-- 讓數據庫的數據按原格式輸出的函數 --> 《% Function wawaHTML(result) if not isNull(result) then result = Server.HtmlEncode(result) result = replace(result,vbcrlf,"<br>") result = replace(result," "," ") result = replace(result,chr(9)," ") 'Tab鍵 wawaHTML=result else wawaNHTML= "沒有內容" end if end Function %》 <!-- /讓數據庫的數據按原格式輸出的函數 --> <!-- 讀取數據庫所有歌曲并顯示出來 --> 《% Dim rs_wawa set rs_wawa=server.createobject("adodb.recordset") rs_wawa.open "p_song",conn,1,1,4 dim pages,allpages,page pages=10 rs_wawa.pageSize=pages allPages = rs_wawa.pageCount page = clng(Request("page")) if isempty(page) or page<0 or page=0 then page=1 if page >rs_wawa.pagecount then page=rs_wawa.pagecount if not(rs_wawa.bof and rs_wawa.eof) then rs_wawa.AbsolutePage = page end if %》 <!--/ 讀取數據庫所有歌曲并顯示出來 --> <!-- 根據參數從數據庫里讀取一個歌曲的記錄 --> 《% if request("action")="view" then if request("id")<>"" then dim id id=clng(Trim(Request.QueryString("id"))) set cm = Server.CreateObject("ADODB.Command") Set cm.ActiveConnection = conn cm.CommandText = "p_wawa_song" cm.CommandType = 4 set p = cm.Parameters p.Append cm.CreateParameter("@id",3,1,,id) dim rs_song set rs_song=server.createobject("adodb.recordset") rs_song.open cm,,1,1 else response.Write("沒有傳遞參數") response.End() end if end if %》 <!-- /根據參數從數據庫里讀取一個歌曲的記錄 --> <!-- 把表單數據添加到數據庫 --> 《% if not isempty(request.Form("submit")) then call addnew end if sub addnew on error resume next song_author=request("song_author") song_content=request("song_content") song_name=request("song_name") set cm = Server.CreateObject("ADODB.Command") Set cm.ActiveConnection = conn cm.CommandText = "insert_song" cm.CommandType = 4 set p = cm.Parameters p.Append cm.CreateParameter("@song_name",130,1,60,song_name) p.append cm.CreateParameter("@song_content",202,1,4000,song_content) p.append cm.CreateParameter("@song_author",130,1,20,song_author) cm.Execute if err.number<>0 then response.write err.description else response.write "ddd" response.end end if
set cm = nothing response.Redirect fileName end sub %》 <!-- /把表單數據添加到數據庫 --> <table width="90%" border="0" align="center"> <tr> <td valign="top"> <!-- 添加歌曲用戶接口 --> 《%if request("action")="add" then%》 <table width="500" border="0" align="center" cellspacing="1" bgcolor="#0000FF"> <form action="" method="post"> <tr bgcolor="#FFFFFF"> <td colspan="2"><div align="center">添加歌詞</div></td> </tr> <tr bgcolor="#FFFFFF"> <td width="50%" align="right">歌曲作者:</td> <td width="50%"> <input name="song_author" type="text" id="song_author"></td> </tr> <tr bgcolor="#FFFFFF"> <td width="50%" align="right">歌曲名稱:</td> <td width="50%"><input name="song_name" type="text" id="song_name"></td> </tr> <tr bgcolor="#FFFFFF"> <td align="right">歌曲內容:</td> <td><textarea name="song_content" cols="50" rows="5" id="song_content"></textarea></td> </tr> <tr bgcolor="#FFFFFF"> <td align="right"><input type="submit" name="Submit" value="提交"></td> <td><input type="reset" name="Submit2" value="重置"></td> </tr> </form>
《%end if%》 <!-- /添加歌曲用戶接口 -->
<!-- 顯示歌曲用戶接口 --> 《%if request("action")="view" then%》 <table width="500" border="0" align="center" cellspacing="1" bgcolor="#0000FF"> <tr bgcolor="#FFFFFF"> <td colspan="2"><div align="center">查看歌詞</div></td> </tr> <tr bgcolor="#FFFFFF"> <td width="50%" align="right">歌曲作者:</td> <td width="50%">《%=rs_song("song_author")%》</td> </tr> <tr bgcolor="#FFFFFF"> <td width="50%" align="right">歌曲名稱:</td> <td width="50%">《%=rs_song("song_name")%》</td> </tr> <tr align="left" bgcolor="#FFFFFF"> <td colspan="2">《%=wawaHTML(cstr(rs_song("song_content")))%》</td> </tr>
《%end if%》 <!-- /顯示歌曲用戶接口 --> <!-- /歡迎界面用戶接口 --> 《%if request("action")="hello" or request("action")="" then%》 <table width="500" border="0" align="center" cellspacing="1" bgcolor="#0000FF"> <tr bgcolor="#FFFFFF"> <td colspan="2"><div align="center">歡迎使用蛙蛙歌詞管理系統</div></td> </tr> <tr bgcolor="#FFFFFF"> <td colspan="2" align="left"><p>殘荷聽雨,梨花飛雪,<br> 落英繽紛時節。<br> 曉來誰染楓林醉?點點都是離人淚.<br> 活著,就是快樂!<br> 自信,就是美麗!<br> 有人愛,就是幸福。 <br> <br> <a href="http://blog.csdn.net/onlytiancai/" target="_blank" ><img src=http://cfan.net.cn/info/"http://bbs.inhe.net/UploadFile/2004-2/2004212153455526.gif" border="0" title="歡迎訪問我的蛙蛙池塘哦,呱呱"></a></p> </td> </tr> 《%end if%》 <!-- /歡迎界面用戶接口 -->
</td> <td valign="top"> <center> <A HREF="《%=fileName%》">首頁</A> <A HREF="《%=fileName%》?action=add">添加歌曲</A> <table width="300" border="0" align="center" cellspacing="1" bgcolor="#0000FF"> 《% if not(rs_wawa.bof and rs_wawa.eof) then While Not rs_wawa.EOF and pages>0 %》 <tr bgcolor="#FFFFFF"> <td><A HREF="《%=fileName%》?action=view&id=《%=rs_wawa(0)%》">《%=rs_wawa(1)%》</A></td> </tr> 《% rs_wawa.MoveNext pages=pages-1 Wend rs_wawa.close:set rs_wawa=nothing else %》 <tr bgcolor="#FFFFFF"> <td>還沒有添加歌曲呢</td> </tr>
《% end if conn.close:Set conn = Nothing %》 《%if page<>1 then%》 <a href="《%=filename%》?page=1">首頁<a/> <a href="《%=filename%》?action=hello&?page=《%=(page-1)%》">上一頁</a> 《%end if%》 《%if page<>allpages then %》 <a href="《%=filename%》?page=《%=(page+1)%》">下一頁</a> <a href="《%=filename%》?page=《%=(allpages)%》">末頁</a> 《% End If %》 當前第《%=page%》幾頁 共《%=allpages%》頁 </center> </td> </tr>
|