我是ASP.Net的新手,到目前为止,我的代码一直在工作,但在整个地方都是一个错误的混搭,没有真正的结构。我试图教自己如何保持演示文稿/BLL/DAL分开,所以我建立了一个简单的页面来尝试和工作。
页面有三个文本框:时钟号,名字和姓氏。在输入时钟号文本框中的时钟号时,我想去我的数据库,获取时钟号码所属的人的名字和姓氏。
我的DAL由以下三个类组成:
Public Class EmployeeName
Private _FirstName As String
Private _Lastname As String
Public Property FirstName() As String
Get
Return _FirstName
End Get
Set(value As String)
_FirstName = value
End Set
End Property
Public Property LastName() As String
Get
Return _Lastname
End Get
Set(value As String)
_Lastname = value
End Set
End Property
End Class
Public Class EmployeeNameDBAccess
Public Function GetEmployeeName(clockNo As Integer) As EmployeeName
Dim employeeName As EmployeeName = Nothing
Dim params As SqlParameter() = New SqlParameter() {New SqlParameter("@clockNo", clockNo)}
Using tbl As DataTable = SMARTDBHelper.ExecuteParameterisedSelectCommand("getEmployeeName", CommandType.StoredProcedure, params)
If tbl.Rows.Count = 1 Then
Dim row As DataRow = tbl.Rows(0)
employeeName = New EmployeeName
employeeName.FirstName = row("INITIALS").ToString()
employeeName.LastName = row("SURNAME").ToString()
End If
End Using
Return employeeName
End Function
End Class
Public Class SMARTDBHelper
Const constr As String = "connection string goes here"
Friend Shared Function ExecuteParameterisedSelectCommand(cmdName As String, cmdType As CommandType, param As SqlParameter()) As DataTable
Dim tbl As New DataTable()
Using con As New SqlConnection(constr)
Using cmd As SqlCommand = con.CreateCommand()
cmd.CommandType = cmdType
cmd.CommandText = cmdName
cmd.Parameters.AddRange(param)
Try
If con.State <> ConnectionState.Open Then
con.Open()
End If
Using da As New SqlDataAdapter(cmd)
da.Fill(tbl)
End Using
Catch ex As Exception
Throw
End Try
End Using
End Using
Return tbl
End Function
End Class我的BLL由以下类组成
Public Class EmployeeNameHandler
Private employee As EmployeeNameDBAccess
Public Sub New()
employee = New EmployeeNameDBAccess()
End Sub
Public Function GetFirstname(clockNo As Integer) As String
Dim emp = employee.GetEmployeeName(clockNo)
Return emp.FirstName
End Function
Public Function GetLastname(clockNo As Integer) As String
Dim emp = employee.GetEmployeeName(clockNo)
Return emp.LastName
End Function
End Class然后在我的页面上有下面的代码来填充文本框
Protected Sub txtCLock_TextChanged(sender As Object, e As EventArgs) Handles txtCLock.TextChanged
Dim emp As New EmployeeNameHandler
Dim cn As Integer = CInt(txtCLock.Text)
Dim firstname = emp.GetFirstname(cn)
Dim lastname = emp.GetLastname(cn)
txtFirstName.Text = firstname
txtLastName.Text = lastname
End Sub我很感激这是基本的,但我有兴趣收集意见,如果我走正确的路线在这里?这能用更好的方式做吗?此外,这里几乎没有错误处理,这是一个我很薄弱的话题,所以非常感谢您的建议。
发布于 2013-12-05 21:17:43
以下是几点建议:
可能建议使用Int.TryParse而不是CInt(txtCLock.Text)来解析用户输入,这样就不会得到无效的类型异常。
在一般的错误处理中,您至少可以在txtCLock_TextChanged中的逻辑周围放置一个try/catch,以便在较低层捕获任何错误,或者记录它们,或者在适用的情况下以一种很好的方式呈现给用户。
如果实际上没有引用第一个/姓氏备份字段,则可以使用自动属性,因此不必为每个属性编写get/set。
https://codereview.stackexchange.com/questions/36692
复制相似问题