一個入門者學習用的小小小小網站範例(13)- 新增書籍資料


書籍以及新聞資料的編輯功能,這些功能必須完成登入驗證之後才能使用,因此將這些功能網頁配置於Admin 資料夾,接下來幾篇看看這些網頁的實作,這一篇是關於書籍資料的新增作業。

書籍以及新聞資料的編輯功能,這些功能必須完成登入驗證之後才能使用,因此將這些功能網頁配置於Admin 資料夾,接下來幾篇看看這些網頁的實作,這一篇是關於書籍資料的新增作業。

書籍資料的編輯,是針對「Books」資料表裡面的資料進行新增、刪除或是修改等操作,網頁「BookAdd.aspx」提供新增的功能,它的內容非常單純,就如同上述的意見回函,配置一個FormView 控制項並且以SqlDataSource 控制項作為其資料來源,網頁配置如下:
 
 
由於這個網頁只是提供新增書籍資料的功能,因此將其DefaultMode 屬性設定為Insert,令其以InsertItemTemplate 樣板顯示,並且於ModeChanging 事件處理程序中,強制轉換成為Insert 模式,由於我們已經有了這一部份功能的設定經驗,因此這裡就不再說明。這個網頁有兩個相當重要的地方必須說明,切換至後置程式碼,畫面上的「上傳」按鈕其Click 事件處理程序,列舉如下:

Protected Sub UploadButton_Click(…)
    Dim fu As FileUpload
   Dim pathLabel As Label
   fu = CType(BookFormView.FindControl("BookCoverFileUpload"), _FileUpload)
   pathLabel = CType(BookFormView.FindControl("ImageUrlLabel"), _Label)
   If fu.HasFile = True Then
      Dim dirPath As String
      dirPath = Server.MapPath("~/Images/") + fu.FileName
      fu.SaveAs(dirPath)
      pathLabel.Text = "~/Images/" + fu.FileName
   End If
End Sub
其中透過FindControl 方法,取得位於FormView 控制項InsertItemTemplate內部的FileUpload 控制項,引用其HasFile 屬性,如果是True 則執行SaveAs 方法將檔案上傳。最後將上傳後的檔案路徑,顯示在畫面上。當使用者完成輸入動作,接下來必須將資料新增至資料庫,但是在此之前,我們必須確認書籍的編號沒有重複,因此必須在FormView 控制項的ItemInserting 事件處理程序裡面,輸入底下的程式碼:

Protected Sub BookFormView_ItemInserting(…) Handles _
    BookFormView.ItemInserting
    Dim conn As String
    Dim bookID As String = ""
    Dim sqlString As String

    Dim tb As TextBox
    tb = CType(BookFormView.FindControl("BookIDTextBox"), TextBox)
    conn = System.Configuration.ConfigurationManager._
    ConnectionStrings("ConnectionString").ToString()
    bookID = tb.Text
    sqlString = "SELECT BookID FROM Books WHERE BookID = @BookID"
    Dim sqlconn As New SqlConnection(conn)
    Dim sqlcmd As New SqlCommand(sqlString, sqlconn)
    Dim sqlPara As New SqlParameter()
    Dim returnObject As Object
    sqlPara.SqlDbType = Data.SqlDbType.NVarChar
    sqlPara.ParameterName = "@BookID"
    sqlPara.Value = bookID
    sqlcmd.Parameters.Add(sqlPara)
    sqlconn.Open()
    returnObject = sqlcmd.ExecuteScalar()
    If returnObject Is Nothing Then
        e.Cancel = False
    Else
        e.Cancel = True
        Dim mlb As Label
        mlb = CType(BookFormView.FindControl("MessageLabel"), Label)
        mlb.Text = "書籍編號重複"
    End If
    sqlconn.Close()
End Sub

這段程式碼取得使用者輸入網頁中所要新增的書籍編號,然後建立所需的SQL 陳述式, 用來檢視資料庫中, 是否有此筆書籍資料, 最後引用ExecuteScalar 方法,此方法回傳所取得的第一筆資料的第一個欄位的內容資料,如果回傳的資料是空值,表示沒有任何符合的資料,「e.Cancel」設定為False 會完成資料新增動作,否則的話,「e.Cancel」被設定為True,表示取消新增的行為。