建立測試頁始終是訪問 SQL Server 資料層並驗證輸入和輸出參數是否得到正確處理的好辦法。實際上,這是確保以後的生產解決方案中的 ASP.NET 頁和組件能夠按照預期方式工作的唯一辦法。這對於從解決方案中的某個層調用其他層時的驗證信任邊界和安全性問題尤其正確。
另外,在進行測試時,請勿拘泥於建立生產類介面。您只需測試目標方法。實際上,故意建立一些您不願以之為最終生產解決方案的“醜陋”測試頁是一個好的策略!本文中,我建立了一些非常簡單的 ASP.NET 頁,其中包含一個測試記錄列表和一個用於添加、編輯和刪除測試記錄的輸入表單。
例如,以下是用於測試主題記錄的 WebForm 布局。您會發現,它包含錯誤訊息或其他訊息的狀態標籤、記錄計數標籤、顯示記錄列表的資料格、用於輸入檢索時使用的記錄 ID 的輸入框以及支援添加、編輯和刪除記錄的小表格(參見圖 10)。
圖 10:用於測試主題記錄的 WebForm 布局
在建立測試頁時,最好使代碼簡潔明了。我通常會為每個按鈕添加一小段代碼,以調用本地方法來處理資料庫操作。以下是 TopicTest.aspx 頁上 Get Record(擷取記錄)按鈕的代碼。
Private Sub btnGetTopic_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnGetTopic.Click
Try
Dim ID As Integer = Int32.Parse(txQueryID.Text)
GetItem(ID) ' 進行資料庫調用
txID.Text = txQueryID.Text
txTitle.Text = mTitle
txDescription.Text = mDescription
lbStatus.Text = "success!"
Catch ex As Exception
lbStatus.Text = ex.Message
End Try
End Sub
請注意,本方法中實際執行的唯一操作是由 GetItem(ID) 方法調用處理的。它執行資料庫調用並使用返回的值設定本地變數。以下是 GetItem 方法的代碼。請注意,它使用了大量的 SqlParameter 對象來處理輸入和輸出值。
Private Sub GetItem(ByVal ID As Integer)
Try
pr = New SqlParameter("RETURN_VALUE", SqlDbType.Int)
pr.Direction = ParameterDirection.ReturnValue
Dim pTitle As SqlParameter = New SqlParameter
With pTitle
.Direction = ParameterDirection.Output
.DbType = DbType.String
.ParameterName = "@Title"
.Size = 30
End With
Dim pDescription As SqlParameter = New SqlParameter
With pDescription
.Direction = ParameterDirection.Output
.DbType = DbType.String
.ParameterName = "@Description"
.Size = 500
End With
cd = New SqlCommand
With cd
.CommandText = "TopicsGetItem"
.CommandType = CommandType.StoredProcedure
.Parameters.Add(New SqlParameter("@AdminCode", "adm"))
.Parameters.Add(New SqlParameter("@ID", ID))
.Parameters.Add(pTitle)
.Parameters.Add(pDescription)
.Parameters.Add(pr)
.Connection = cn
.Connection.Open()
.ExecuteNonQuery()
.Connection.Close()
End With
' 檢查傳回碼
If Not pr.Value Is Nothing Then
Select Case Int32.Parse(pr.Value)
Case 100 : Throw New ApplicationException("Access violation")
Case 101 : Throw New ApplicationException("Invalid ID")
End Select
End If
' 設定傳回值
mTitle = pTitle.Value.ToString()
mDescription = pDescription.Value.ToString()
Catch ex As Exception
Throw New Exception(ex.Message, ex)
End Try
End Sub
GetItem 方法的另一個重要方面是使用了傳回值參數。它在前幾行代碼中進行聲明,並在執行預存程序後進行檢查。請注意,我檢查了已知錯誤碼 100 和 101。有關其他錯誤的處理方法,我們將在以後介紹如何建立成熟的中介層時進行介紹。問題在於,我要利用傳回值並在需要時拋出一個自訂異常。
對於本解決方案樣本,我最終產生了六個 Web 表單,並用它們測試了將近 30 個預存程序和自訂函數。您可在本文開始部分列出的下載軟體包中找到所有這些完成的表單。
現在我們已經定義了表、建立了預存程序和函數並產生了 ASP.NET Web 表單,因此可以使用 Visual Studio .NET 2003 產生資料庫層的安裝指令碼了。資料庫管理員(有時是您自己)可以將此指令碼應用到生產伺服器上。