[習題]ADO.NET #8,文章(產品)的瀏覽次數 / 點閱數 / 點擊次數,怎麼作?兼論 DataReader 新增/刪除/修改的寫法,.ExecuteNonQuery()方法

摘要:[習題]ADO.NET #8,文章(產品)的瀏覽次數 / 點閱數 / 點擊次數,怎麼作?

兼論 DataReader 新增/刪除/修改的寫法,.ExecuteNonQuery()方法

 


 

 

 

 

 

 

 

Q:  如何統計某一篇文章的「瀏覽數」、「點閱數」、「點擊次數」? 怎麼做?

本文的完整解說,已經出版書籍,放在 ASP.NET專題實務 II,也就是「下集」

 

A:  請您先參考這兩篇文章,有了這些基礎,才能作下去。

第一,請您先看過這篇文章 ([ADO.NET] DataReader的標準範例 for ASP.NET 2.0 / 3.5 ),再來繼續下面的內容

第二,[習題] 補充本書第14章 的範例--自己撰寫ADO.NET程式 / 網站的首頁

本範例,是第二篇文章的補充。

 


'----自己寫的----
Imports System
Imports System.Web.Configuration
Imports System.Data
Imports System.Data.SqlClient
'----自己寫的----   


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim my_hit_no As Integer = 0  '--點閱數   
       
        If IsNumeric(Request("id")) And Request("id") <> "" Then

            Dim Conn As SqlConnection = New SqlConnection
            Conn.ConnectionString = WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString
            Dim dr As SqlDataReader = Nothing
                Dim cmd As New SqlCommand("select * from test where id = @ID, Conn)
   cmd.parameters.AddWithValue("@ID", Request(ïd")) '---- 參數寫法,避免SQL Injection攻擊 

            Try
                Conn.Open()   '---- 這時候才連結DB                 
                dr = cmd.ExecuteReader()   '---- 這時候執行SQL指令,取出資料                  
                Dim myArticle As String = Nothing

                '****************************************(start)                 
                dr.Read()
                Label1_title.Text = dr.Item("title").ToString()
                Label2_summary.Text = dr.Item("summary").ToString()
                Label3_test_time.Text = dr.Item("test_time").ToString()
                '//////////// 文章分段 /////////////////////////////////////                 
                myArticle = dr.Item("article").ToString()
                Label4_article.Text = Replace(myArticle, vbCrLf, "<br>")
                '////////////////////////////////////////////////////////////////                  
                Label5_author.Text = dr.Item("author").ToString()
                Label6_hit_no.Text = dr.Item("hit_no")  '--點閱數                 
                my_hit_no = CType(dr.Item("hit_no"), Integer)  '--點閱數                 
                '****************************************(end)    
          
            Catch ex As Exception   '---- 如果程式有錯誤或是例外狀況,將執行這一段                 
                Response.Write("Error Message----  " & ex.ToString())
            Finally
                If Not (dr Is Nothing) Then
                    cmd.Cancel()                     '----關閉DataReader之前,一定要先「取消」SqlCommand                     
                    dr.Close()
                End If

                '===============================================                 
                '== 點閱 / 點擊次數加一 
    Dim cmd1 As New SqlCommand("update test set hit_no = @hit_no where id = @id", Conn)
  cmd1.Parameter.AddWithValue("@hit_no", (my_hit_no + 1))
  cmd1.Parameter.AddWithValue("@id", Request("id")) cmd1.ExecuteNonQuery()
                cmd1.ExecuteNonQuery()
                '===============================================    

                cmd1.Cancel()

                If (Conn.State = ConnectionState.Open) Then
                    Conn.Close()
                    Conn.Dispose() '---- 一開始宣告有用到 New的,最後必須以 .Dispose()結束                 
                End If
            End Try

        Else
            Response.Write("Error...沒有這篇文章!")
            Response.End()  '--程式中斷,不再執行。您也可以改寫成 Return。看看畫面有何不同?         
        End If
    End Sub

 

本文的完整解說,已經出版書籍,放在 ASP.NET專題實務 II,也就是「下集」

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

如果上面的 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
            '************************************************************

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

 

 

 

 

您有沒有發現,連續兩篇文章

我用同一個程式範本(範例 [ADO.NET] DataReader的標準範例 for ASP.NET 2.0 / 3.5 )

改啊改的,就能衍生出很多功能。

一點都不難啊

 

先不要急,底子打好了,

您的"能力"才能跟得上您的"想像力"

才不會什麼都寫不出來。

 

初學者會發現程式寫不出來,通常都是

  • 資料表不會設計。
  • 不懂 ADO.NET,只會拖拉「現有的控制項」來做。
  • 手邊沒有範本可以改寫(你要我畫面一片空白,一個字一個字慢慢 Key in,我也沒這麼神。我只不過範例蒐集的比較多、比較會改)

 

 

 

下面兩個方法可以幫您脫離這個困境:

  • 多看書、多看書、多看書
  • 多練習、多練習、多練習

 

ASP.NET專題實務裡面的第 13/14兩章都有類似範例可以參考

希望對讀者有幫助。

 

 

本系列共有下面文章:

範例:


 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估