MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

 

 

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, "<", "&lt;")
36    u_command = Replace(u_command, "&lt;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新功能



posted on 2010-10-15 09:47  MIS2000 Lab.  阅读(197)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub