http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3445.aspx
Detail的程序
点选任何一个产品,就会看见这个产品的明细、内容、价格....等等
1
2 '----自己写的------------------------------
3 Imports System.Data
4 Imports System.Data.SqlClient
5 '----自己写的-----------------------------
6 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
7 'ASP.NET程序的四大步骤。把数据库的数据,呈现在画面上!
8 '第一,连接数据库
9 '----自己手写一段「数据库联机字符串」,如下:
10 Dim Conn As SqlConnection = New SqlConnection("Server=localhost;uid=test;pwd=test;database=test")
11 Conn.Open()
12 '第二,执行SQL指令
13 Dim SQLstr As String = Nothing
14 '---- 在VS 2005/2008里面,设定变量都要有一个「启始值」、「定义值」,不然的话,就会出现警告讯息。
15 '---- 虽然不会执行错误,但画面上会出现绿色曲线,作为警告。所以我们只好设定为 = Nothing
16 If Request("id") = "" Then
17 SQLstr = "select * from test where id = 1"
18 Else
19 SQLstr = "select * from test where id =" & Request("id")
20 End If
21 Dim cmd As New SqlCommand(SQLstr, Conn)
22 Dim dr As SqlDataReader = cmd.ExecuteReader() '---- 执行SQL指令
23 '第三,自由发挥
24 If Not dr.READ() Then
25 Response.Write("抱歉!找不到数据!")
26 cmd.Cancel()
27 dr.Close()
28 Else
29 Response.Write("文章标题:<h3>" & dr.Item("title") & "</h3><hr>")
30 Response.Write("发表日期:<font color=red>" & dr.Item("test_time") & "</font><br>")
31 Response.Write("文章摘要:<font color=gray>" & dr.Item("summary") & "</font><hr>")
32 '---- 下面这一段,是「按下Enter键」作文章换行 --------- start
33 Dim u_command As String
34 u_command = Replace(dr.Item("article"), vbCrLf, "<br>")
35 u_command = Replace(u_command, "<", "<")
36 u_command = Replace(u_command, "<br>", "<br>")
37 Response.Write("文章内容:<br>" & u_command)
38 '----------------------------------------------------------------------------------- end
39 Response.Write("<p align=right>作者:" & dr.Item("author") & ".....文章点阅率:" & dr.Item("hit_no") & "</p>")
40 Dim hit_no As Integer = CInt(dr.Item("hit_no"))
41 cmd.Cancel()
42 dr.Close() '---- 必须先关闭「已经使用中」的DataReader,才能使用 第二个DataReader。
43 '---- 下面这一段,是有人看这篇文章,就「增加点阅率」 --------- start
44 If Not Request("id") = "" Then
45 Dim SQLstr2 As String = "Update test set hit_no =" & (hit_no + 1) & " where id =" & Request("id")
46 Dim cmd2 As New SqlCommand(SQLstr2, Conn)
47 cmd2.ExecuteNonQuery()
48 cmd2.Cancel()
49 End If
50 '------------------------------------------------------------------------------------------------ end
51 End If
52 '第四,关闭联机
53 Conn.Close()
54 End Sub
55
=======================================================================================
如果上面的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新功能
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)