您的位置:首页 > 运维架构 > 网站架构

自己动手写的版本 ---- 网站的 Detail程序 (DataReader)

2010-10-15 09:47 357 查看
http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3445.aspx



Detail的程序
点选任何一个产品,就会看见这个产品的明细、内容、价格....等等

'----自己写的------------------------------
Imports System.Data
Imports System.Data.SqlClient
'----自己写的-----------------------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'ASP.NET程序的四大步骤。把数据库的数据,呈现在画面上!

'第一,连接数据库
'----自己手写一段「数据库联机字符串」,如下:
Dim Conn As SqlConnection = New SqlConnection("Server=localhost;uid=test;pwd=test;database=test")
Conn.Open()

'第二,执行SQL指令
Dim SQLstr As String = Nothing
'---- 在VS 2005/2008里面,设定变量都要有一个「启始值」、「定义值」,不然的话,就会出现警告讯息。
'---- 虽然不会执行错误,但画面上会出现绿色曲线,作为警告。所以我们只好设定为 = Nothing

If Request("id") = "" Then
SQLstr = "select * from test where id = 1"
Else
SQLstr = "select * from test where id =" & Request("id")
End If

Dim cmd As New SqlCommand(SQLstr, Conn)
Dim dr As SqlDataReader = cmd.ExecuteReader() '---- 执行SQL指令

'第三,自由发挥
If Not dr.READ() Then
Response.Write("抱歉!找不到数据!")
cmd.Cancel()
dr.Close()
Else
Response.Write("文章标题:<h3>" & dr.Item("title") & "</h3><hr>")
Response.Write("发表日期:<font color=red>" & dr.Item("test_time") & "</font><br>")
Response.Write("文章摘要:<font color=gray>" & dr.Item("summary") & "</font><hr>")

'---- 下面这一段,是「按下Enter键」作文章换行 --------- start
Dim u_command As String
u_command = Replace(dr.Item("article"), vbCrLf, "<br>")
u_command = Replace(u_command, "<", "<")
u_command = Replace(u_command, "<br>", "<br>")
Response.Write("文章内容:<br>" & u_command)
'----------------------------------------------------------------------------------- end
Response.Write("<p align=right>作者:" & dr.Item("author") & ".....文章点阅率:" & dr.Item("hit_no") & "</p>")
Dim hit_no As Integer = CInt(dr.Item("hit_no"))
cmd.Cancel()
dr.Close() '---- 必须先关闭「已经使用中」的DataReader,才能使用 第二个DataReader。

'---- 下面这一段,是有人看这篇文章,就「增加点阅率」 --------- start
If Not Request("id") = "" Then
Dim SQLstr2 As String = "Update test set hit_no =" & (hit_no + 1) & " where id =" & Request("id")
Dim cmd2 As New SqlCommand(SQLstr2, Conn)
cmd2.ExecuteNonQuery()
cmd2.Cancel()
End If
'------------------------------------------------------------------------------------------------ end
End If

'第四,关闭联机
Conn.Close()
End Sub


=======================================================================================

如果上面的DataReader,您要使用「参数」来作,以避免初步的 SQL Injection(资料隐码)攻击

请稍作修改如下:

'**** 重 点!*************************************************
'**** 改用 SqlCommand的 @参数来作
Dim cmd As New SqlCommand("select * from test where id = @id", Conn)

cmd.Parameters.Add("@id", SqlDbType.Int)
cmd.Parameters("@id").Value = CType(Request("id"), Integer)

'== 参考网址 http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlcommand.parameters.aspx '************************************************************

=======================================================================================

2009/10月补充:

关于本文的范例,我写了一篇文章,以PDF档分享给大家。当作本书的后续补充章节。

请看: [习题] 补充本书第14的范例--自己撰写ADO.NET程序 / 网站的首页

本范例已经收录在「下集」,并且集结出书 ASP.NET专题实务 II -- 范例集与 4.0新功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: