程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0數據教程之五十六:添加新記錄時包含一個文件上傳選項

ASP.NET 2.0數據教程之五十六:添加新記錄時包含一個文件上傳選項

編輯:關於ASP.NET

返回“ASP.NET 2.0數據教程目錄”

導言:

在前面2節教程,我們探討了如何使用FileUpload控件從客戶端 向服務器上傳文件,以及如何在數據Web控件裡顯示二進制數據。

在本節 ,我們將創建一個web頁面以添加新的種類。除了為類的name和description屬性 添加TextBoxes控件外,我們還要在頁面上添加2個FileUpload控件 ——一個用來上傳新類的圖片,另一個用來上傳類的小說明冊子。上 傳的圖片將直接存儲在新記錄的Picture列。與此相反,小冊子將存儲在 ~/Brochures 文件夾,同時將文件路徑存儲在新記錄的BrochurePath列。

在創建頁面之前,我們需要更新體系結構。由於CategoriesTableAdapter的主查 詢並不返回Picture列,因此自動生產的Insert方法只包含了CategoryName, Description和BrochurePath列。我們需要在TableAdapter裡創建新的方法以包括 Categories的4個列。同時業務邏輯層的的CategoriesBLL類也需要更新。

第1步:在CategoriesTableAdapter添加一個InsertWithPicture方法

在前 面的教程《創建一個數據訪問層》裡我們創建了CategoriesTableAdapter,並設 置其自動生成了基於主查詢的INSERT, UPDATE和DELETE命令。此外,我們設置該 TableAdapter啟用DB Direct方法,它將創建Insert, Update和Delete方法。這些 方法執行自動生成的INSERT, UPDATE和DELETE命令,自然而然的,其接受的輸入 參數基於主查詢所返回的那些列。在教程《上傳文件》裡,我們擴展了 CategoriesTableAdapter的主查詢以包含BrochurePath列。

因為 CategoriesTableAdapter的主查詢並為引用Picture,在添加新記錄或更新記錄時 不能涉及Picture值。為了獲取Picture信息,我們要麼在TableAdapter裡創建一 個新方法以插入Picture的二進制數據;要麼定制自動生成的INSERT命令。但定制 自動生成的INSERT命令有一個風險,即定制的INSERT命令有可能被向導覆蓋。比 如,假設我們定制INSERT命令使用Picture列,更新TableAdapter的Insert方法, 使之多包含一個對應picture二進制數據的參數。然後在業務邏輯層創建一個方法 使用該 DAL方法,再在表現層調用該業務邏輯層方法。現在一切工作正常,但當 下一次在TableAdapter設置向導裡設置TableAdapter完成後,我們定制的INSERT 命令馬上就會被向導重寫,回歸到定制前的狀態。其結果是我們的代碼將無法編 譯!

注意:

如果使用存儲過程而不用SQL語句的話,就不存在這個 問題。在以後的教程裡,我們將探討在數據訪問層用存儲過程替代SQL語句。

為避免這個頭痛的問題,我們為TableAdapter添加新的方法,而不定制自 動生成的SQL命令。我們為添加的方法命名為InsertWithPicture,它接受 CategoryName, Description, BrochurePath和Picture值;執行INSERT命令將上 述值添加進一條記錄。

在CategoriesTableAdapter的頂部點右鍵,選擇 “添加查詢”。進入TableAdapter 查詢設置向導,首先詢問我們 TableAdapter查詢如何訪問數據庫,選擇“使用SQL語句”,點Next, 因為我們要為表Categories添加新記錄,選“INSERT”,點Next。

圖1:選“INSERT”選項

現在,我們需要指定INSERT SQL語句。向導自動地生成一個基於主查詢的INSERT語句。此時,它只插入 CategoryName, Description和BrochurePath值。對其更新,包括Picture列和參 數@Picture ,如下:

INSERT INTO [Categories]
   ([CategoryName], [Description], [BrochurePath], [Picture])
VALUES
  (@CategoryName, @Description, @BrochurePath, @Picture)

最後,向導要我們為方法命名,取名為 InsertWithPicture,點Finish。

圖2:為新方法命名為InsertWithPicture

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved