在机房重构过程中,每个功能的实现都会涉及到数据库的访问,代码重复率非常高,于是,把这些重复的代码抽象成一个类,有需求直接调用就可以了。这时候,SqlHelper就登场了。
SqlHelper是一个基于·NET Framework的数据库操作组件。SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了。
机房收费中关于数据库的操作总结出来就这这四种情况:
1.不带参数的增删改操作,返回结果为值
2.带参数的增删改操作,返回结果为值
3.不带参数的查询操作,以表为返回结果
4.带参数的查询操作,以表为返回结果
SqlHelper可以将这些方法进行封装,然后使用的时候只需调用。有参数的传参。
Public Class Sqlhelper '利用配置文件寻找“连接字符串”,建立cmd文件 Dim constr As String = System.Configuration.ConfigurationSettings.AppSettings("conStr") Dim conn As New SqlConnection(constr) Dim cmd As New SqlCommand '带参数,返回结果是表 Public Function GetDataTable(ByVal str As String, ByVal cmdtype As CommandType, ByVal sqlparams As SqlParameter()) As DataTable cmd = conn.CreateCommand() '利用传进的参数填充cmd对象 cmd.CommandText = str cmd.CommandType = cmdtype cmd.Parameters.AddRange(sqlparams) Dim dtSQL As New DataTable '定义数据表格 Dim sqlAdapter As New SqlDataAdapter(cmd) '定义数据适配器变量,并实例化,将cmd绑定在adaptor上面 Dim dsSQL As New DataSet '定义数据缓存变量 Try conn.Open() sqlAdapter.Fill(dsSQL) '用adapter将dataset填充 Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally Call closeconn(conn) End Try Return dsSQL.Tables(0) End Function '不带参数返回结果是表 Public Function GetDataTable(ByVal str As String, ByVal cmdtype As CommandType) As DataTable cmd = conn.CreateCommand() '利用传进的参数填充cmd对象 cmd.CommandText = str cmd.CommandType = cmdtype Dim dtSQL As New DataTable '定义数据表格 Dim sqlAdapter As New SqlDataAdapter(cmd) '定义数据适配器变量,并实例化,将cmd绑定在adaptor上面 Dim dsSQL As New DataSet '定义数据缓存变量 Try conn.Open() sqlAdapter.Fill(dsSQL) '用adapter将dataset填充 Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally Call closeconn(conn) End Try Return dsSQL.Tables(0) End Function ' 带参数,返回结果是值 Public Function ExecuteNonQuery(ByVal str As String, ByVal cmdtype As CommandType, ByVal sqlparams As SqlParameter()) As Integer cmd = conn.CreateCommand() '利用传进的参数填充cmd对象 cmd.CommandText = str cmd.CommandType = cmdtype cmd.Parameters.AddRange(sqlparams) Dim int As Integer Try conn.Open() int = cmd.ExecuteNonQuery() Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally Call closeconn(conn) End Try Return int End Function '带参数,返回结果是值 Public Function ExecuteNonQuery(ByVal str As String, ByVal cmdtype As CommandType) As Integer cmd = conn.CreateCommand() '利用传进的参数填充cmd对象 cmd.CommandText = str cmd.CommandType = cmdtype Dim int As Integer Try conn.Open() int = cmd.ExecuteNonQuery() Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally Call closeconn(conn) End Try Return int End Function '关闭数据库连接 Public Shared Sub closeconn(ByVal conn As SqlConnection) If conn.State = ConnectionState.Open Then conn.Close() End If End Sub End Class
总结:在vb中这不就是模块吗。sqlhelper体现了面向对象的抽象,封装,减少代码重复。后面的存储过程也是将相同的代码进行封装,减少重复,而且设计模式也是相同道理,总之,这都是为了,容易维护,减少重复,给代码减肥。