這個範例網站的主要功能,在於介紹「藍海文化」網站出版的圖書,其中提供了四種不同類型的書籍檢視方式,在前述幾篇網站功能的介紹說明當中,已經針對這一部份的網頁操作進行了相關的說明,這一篇開始逐一針對各種功能的實作步驟進行說明。
這個範例網站的主要功能,在於介紹「藍海文化」網站出版的圖書,其中提供了四種不同類型的書籍檢視方式,在前述幾篇網站功能的介紹說明當中,已經針對這一部份的網頁操作進行了相關的說明,這一篇開始逐一針對各種功能的實作步驟進行說明。
在這個設計頁面中,除了套用主版頁面之外,它僅在其中配置了一個DataList 控制項,用來呈現搜尋的書籍資料結果。讀者要特別注意的是,這裡並沒有配置連線資料庫所需的SqlDataSource 控制項,取而代之的是在網頁的載入事件處理程序中,透過ADO.NET 程式碼進行搜尋功能的實作。先回到稍早討論首頁搜尋功能的程式碼,當使用者按下「查詢」按鈕的時候,執行以下的Click 程式區塊:
現在切換至後置程式碼,來看看其中的網頁載入事件處理程序,列舉如下:
Protected Sub Page_Load(ByVal sender As Object,
ByVal e As System.EventArgs) Handles Me.Load
Dim connString As String
connString = _
ConfigurationManager.ConnectionStrings( _
"ConnectionString").ToString()
Dim conn As New SqlConnection(connString)
Dim cmd As New SqlCommand()
Dim reader As SqlDataReader
Dim conditionString As String
cmd.Connection = conn
cmd.CommandText = _
"SELECT * FROM Books " & _
"WHERE " & _
"BookID LIKE @BookID OR " & _
"Title LIKE @Title OR " & _
"Author LIKE @Author "
conditionString = "%" + Request.QueryString("bookid") + "%"
Dim bookPara As New SqlParameter
bookPara.ParameterName = "@BookID"
bookPara.SqlDbType = Data.SqlDbType.NVarChar
bookPara.Value = conditionString
cmd.Parameters.Add(bookPara)
Dim titlePara As New SqlParameter
titlePara.ParameterName = "@Title"
titlePara.SqlDbType = Data.SqlDbType.NVarChar
titlePara.Value = conditionString
cmd.Parameters.Add(titlePara)
Dim authorPara As New SqlParameter
authorPara.ParameterName = "@Author"
authorPara.SqlDbType = Data.SqlDbType.NVarChar
authorPara.Value = conditionString
cmd.Parameters.Add(authorPara)
conn.Open()
reader = cmd.ExecuteReader()
BookDataList.DataSource = reader
BookDataList.DataBind()
conn.Close()
End Sub
一開始建立所需的SqlConnection 與SqlCommand 物件,指定所需的SQL 陳述式,這段SQL 以LIKE 關鍵字進行BookID、Title 以及Author 等三個欄位 的模糊比對。 以下這一行程式碼,取得隨著網址傳遞過來的搜尋條件「bookid」,建 立一個條件值字串conditionString,然後將這個值逐一指定給「@BookID」、 「@Title」以及「@Author」等參數。
conditionString = "%" + Request.QueryString("bookid") + "%"
最後,執行ExecuteReader 方法,取得回傳的SqlDataReader 物件,並且將其設定給畫面上的DataList 控制項BookDataList。