D层重构一《Sqlhelper》
来源:互联网 发布:网络交友新时空ppt 编辑:程序博客网 时间:2024/06/06 23:59
前提:
在上篇博客《三层之D层数据库操作》我们已经发现了D层中出现的问题:重复!
对于重复的出现,我们现在的方法一是抽象出父类,提出公共的东西。二是创建函数过程,传入参数调用过程。
SqlHelper类:
百科介绍;SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。
上面的博客中我们已经发现增删改方法的形式相同,不同的只是对应的sql语句和参数,当他们执行完之后可以弹出个MSGbox显示操作成功,也可以返回一个Boolean给B层,根据布尔值的真假显示操作成功与否。
查询因为要从数据库中读取数据单独的作为一个方法。
整体上是这两个方法,在加上各自的方法是否有传入参数所以总体上共4方法。
总结: 现在的代码不仅仅是满足现有的需要为了实现而实现,要考虑的是如何让代码更简练,更容易维护和复用,即使我们不知道有sqlhelper这个组件,也可以写出相应的类,来简化D层对数据库的操作。
在上篇博客《三层之D层数据库操作》我们已经发现了D层中出现的问题:重复!
对于重复的出现,我们现在的方法一是抽象出父类,提出公共的东西。二是创建函数过程,传入参数调用过程。
SqlHelper类:
百科介绍;SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。
D层应用
1、用于简化D层重复写的数据库连接SqlConnection,SqlCommand,SqlDataReader等。对这些进行了封装。使用时只需要调用Sqlhelper中的方法,传入一些参数如数据库连接字符串,Sql语句等,访问数据库
2.划分方法上面的博客中我们已经发现增删改方法的形式相同,不同的只是对应的sql语句和参数,当他们执行完之后可以弹出个MSGbox显示操作成功,也可以返回一个Boolean给B层,根据布尔值的真假显示操作成功与否。
查询因为要从数据库中读取数据单独的作为一个方法。
整体上是这两个方法,在加上各自的方法是否有传入参数所以总体上共4方法。
3.代码实现
Imports System.Data '相关引用Imports System.Data.SqlClientImports System.ConfigurationPublic Class SqlHelper '建立数据库链接 Private ReadOnly conn As String = ConfigurationManager.AppSettings("sqlconnect") Dim cn As SqlConnection = New SqlConnection(conn) Dim cmd As SqlCommand = New SqlCommand() '在调用sqlhelper之前关闭已经打开的链接和清空sqlcommand Private Sub CloseCn() If cn.State <> ConnectionState.Closed Then cn.Close() cn = Nothing End If End Sub Private Sub CloseCmd() If Not IsNothing(cmd) Then cmd.Dispose() cmd = Nothing End If End Sub '有参数的增删改,返回boolean Public Function ExecuteAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParas As SqlParameter()) As Boolean cmd.Parameters.AddRange(sqlParas) cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = cn Try cn.Open() Return cmd.ExecuteNonQuery() cmd.Parameters.Clear() Catch ex As Exception Return False Finally Call CloseCn() Call CloseCmd() End Try End Function '无参数的增删改查 Public Function ExecuteAddDelUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Boolean cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = cn Try cn.Open() Return cmd.ExecuteNonQuery() cmd.Parameters.Clear() Catch ex As Exception Return False Finally Call CloseCn() Call CloseCmd() End Try End Function '有参数的查询返回Datatable Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlParas As SqlParameter()) As DataTable Dim adp As New SqlDataAdapter Dim ds As New DataSet Dim dt As New DataTable cmd.CommandText = cmdText cmd.Parameters.AddRange(sqlParas) cmd.CommandType = cmdType cmd.Connection = cn adp = New SqlDataAdapter(cmd) Try adp.Fill(ds) dt = ds.Tables(0) cmd.Parameters.Clear() Catch ex As Exception MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告!") Finally Call CloseCn() Call CloseCmd() End Try Return dt End Function '无参数的查询操作,返回datatale Public Function ExecuteSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable Dim adp As New SqlDataAdapter Dim ds As New DataSet Dim dt As New DataTable cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = cn adp = New SqlDataAdapter(cmd) Try adp.Fill(ds) dt = ds.Tables(0) Catch ex As Exception MsgBox("查询失败", CType(vbOKOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), "警告!") Finally Call CloseCn() Call CloseCmd() End Try Return dt End FunctionEnd Class
总结: 现在的代码不仅仅是满足现有的需要为了实现而实现,要考虑的是如何让代码更简练,更容易维护和复用,即使我们不知道有sqlhelper这个组件,也可以写出相应的类,来简化D层对数据库的操作。
0 0
- D层重构一《Sqlhelper》
- D层瘦身之SqlHelper
- 从SQLhelper和D层体会“形式主义”
- SqlHelper
- SqlHelper
- SqlHelper
- SqlHelper:
- sqlHelper
- SQLHelper
- SqlHelper
- SQLHelper
- SqlHelper
- SqlHelper
- SQLHelper
- SqlHelper
- sqlhelper
- SQLHelper
- SQLHelper
- 自学考试本科日语
- js中SetInterval与setTimeout用法
- oracle 的起源和发展
- codeblocks中设置gcc的链接方式
- Codeforces Round #268 (Div. 2) C 24 Game [构造]
- D层重构一《Sqlhelper》
- thinkphp文件上传与下载
- C++ rand,srand用法
- QT学习点滴记录(四)
- C++ explicit构造函数----禁止隐式格式转换
- js笔记之Math random()、ceil()、floor()、round()
- Explicit——谨慎定义隐式类型转换函数
- UNIX基本命令-目录及文件操作
- [cocos2d] 谁摸了我一下----触摸事件处理