机房收费开始一段时间了,刚开始也是敲了一段时间,发现D层访问数据库出现了大量的重复代码,每个D层类都要
单独访问数据库。发现问题,咱们就解决问题,查阅前人的博客,发现了一个SqlHelper类,运用一下,果然好用,省
去了大量时间去写重复的代码。
小面对SQL中的一些类方法进行简单的介绍。
1.SQLHelper.ExecuteNonQuery 作用:用于执行语句
2. SQLHelper.ExecuteScalar 作用:用于获取单字段值语句
3. SQLHelper.ExecuteReader 作用:用于获取结果集语句
....
我写的SqlHelper类(ChargeSqlHelperDAL)
Public Class ChargeSqlHelperDAL
Private ReadOnly sqlConnection As String = sqlConnection
''' <summary>
''' 执行查询操作,有参数
''' </summary>
''' <param name="cmdText">需要查询的Sql语句</param>
''' <param name="cmdType">给出Sql语句的类型</param>
''' <returns>dataTable,查询到的表格</returns>
''' <remarks></remarks>
Public Function ExecuteDataTable(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As DataTable
Using conn As New SqlConnection(sqlConnection)
Dim cmd As SqlCommand = conn.CreateCommand()
Dim adp As SqlDataAdapter
Dim ds As New DataSet
cmd.CommandText = cmdText '设置查询的语句
cmd.CommandType = cmdType '设置一个值,解释cmdText
cmd.Parameters.AddRange(sqlParams)
adp = New SqlDataAdapter(cmd)
Try
conn.Open() '打开连接
adp.Fill(ds)
Return ds.Tables(0) '返回DateTable
Catch ex As Exception '抛出异常
Return Nothing '返回nothing
Throw ex
End Try
End Using
End Function
''' <summary>
''' 执行查询操作,无参数
''' </summary>
''' <param name="cmdText">需要查询的Sql语句</param>
''' <param name="cmdType">给出Sql语句的类型</param>
''' <returns>dataTable,查询到的表格</returns>
''' <remarks></remarks>
Public Function ExecuteDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
Using conn As New SqlConnection(sqlConnection)
Dim cmd As SqlCommand = conn.CreateCommand()
Dim adp As SqlDataAdapter
Dim ds As New DataSet
cmd.CommandText = cmdText '设置查询的语句
cmd.CommandType = cmdType '设置一个值,解释cmdText
adp = New SqlDataAdapter(cmd)
Try
conn.Open() '打开连接
adp.Fill(ds)
Return ds.Tables(0) '返回DateTable
Catch ex As Exception '抛出异常
Return Nothing '返回nothing
Throw ex
End Try
End Using
End Function
''' <summary>
''' ExecuteNonQuery操作,对数据库进行增删改操作,有参数
''' </summary>
''' <param name="cmdText">需要执行的Sql语句</param>
''' <param name="cmdType">给出Sql语句的类型</param>
''' <param name="sqlParams">参数数组,参数个数根据实际情况而定</param>
''' <returns>integer,受影响的行数</returns>
''' <remarks></remarks>
Public Function ExecuteNonQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParams As SqlParameter()) As Integer
Using conn As New SqlConnection(sqlConnection)
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText = cmdText '设置查询的语句
cmd.CommandType = cmdType '设置一个值,解释cmdText
cmd.Parameters.AddRange(sqlParams)
Try
conn.Open() '打开连接
Return cmd.ExecuteNonQuery() '执行增删改操作并返回受影响的行数
Catch ex As Exception
Return 0 '如果出错,返回0
Throw ex
End Try
End Using
End Function
''' <summary>
''' ExecuteNonQuery操作,对数据库进行增删改操作,无参数
''' </summary>
''' <param name="cmdText">需要执行的Sql语句</param>
''' <param name="cmdType">给出Sql语句的类型</param>
''' <returns>integer,受影响的行数</returns>
''' <remarks></remarks>
Public Function ExecuteNonQuery(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
Using conn As New SqlConnection(sqlConnection) '使用连接池,可以在使用完成后自动关闭连接.
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText = cmdText '设置查询的语句
cmd.CommandType = cmdType '设置一个值,解释cmdText
Try
conn.Open() '打开连接
Return cmd.ExecuteNonQuery() '执行增删改操作并返回受影响的行数
Catch ex As Exception
Return 0 '如果出错,返回0
Throw ex
End Try
End Using
End Function
End Class
以用户上机为例—调用代码
Public Function SelectUser(enUser As ChargeEntity.ChargeT_UsersEntity) As DataTable
Dim helper As New ChargeSqlHelperDAL '实例化ChargeSqlHelperDAL
Dim dt As New DataTable '定义DataTable
Dim cmdText As String = "select * from T_Users where userName=@userName and password=@password" '获得数据库中的字段
Dim sqlParams As SqlParameter() = {New SqlParameter("@userName", enUser.userName And "@password", enUser.password)} '传参
dt = helper.ExecuteDataTable(cmdText, CommandType.Text, sqlParams)
Return dt
End Function
End Class
个人小结
使用该类目的就是让使用者更方便、更安全的对数据库的操作,既是除了在SQLHelper类以外的所有类将不用引
用对数据库操作的任何类与语句,无须担心数据库的连接与关闭的问题。SqlHelper就是将D层连接数据库的重复代码
抽象成为SqlHelper类,从而有利于代码的复用。
虽然好多人都写过了这篇博客,但我还是想写一下,记录一下自己的成长与收获。目前的理解就是这些,希望随着学习的深入,不断思考,理解的更加深入。