基于.NET的轻量级ORM框架及数据库工具集(二)

DBHelper2对ado.net的优化与扩展

一、优化ADO.NET的操作

ADO.NET中访问数据比较烦人的几个步骤:
1、创建connection对象,此时需要用到数据库连接串。通常数据库连接串是在web.config文件中配置的,需要通过configurationManager从配置文件中获取。
2、从connection上创建command对象,传入SQL语句。
3、如果SQL语句有参数,需要依次创建parameter对象,并传入各参数值。
4、通过connection打开数据库连接。
5、通过command的ExecuteNonQuery, ExecuteReader, ExecuteScalar方法读取数据或执行SQL命令,或通过DataAdapter对象执行Fill操作等。
6、关闭数据库连接。
以上繁烦的操作在DBHelper中得到了优化:
1、可以直接使用在web.config中配置好的数据库连接串名字来创建DBHelper实例。
2、不需要再使用command对象来操作。
3、可以在一条语句中一次性传入SQL语句、参数名和参数值。
4、直接执行ExecuteXXXX或ReadTable等,不需要显式操作打开或关闭数据库。
5、使用约定值可减少代码量。比如创建DBHelper对象时可以省略连接串名称,此时使用约定的数据库连接串名称”ConnectionString”。

二、示例

1、ExecuteScalar

Dim  ProductID As Integer = 1
'使用DBFactory创建DBHelper实例
'指定数据库连接串,根据连接串的providerName来确定数据库类型,默认为SQLSERVER
Using db As DBHelper = DBFactory.CreateDBHelper("ConnectionString")
    Dim SQL As String = "select  Name from Production.Product where ProductID=@ProductID"
    '执行ExecuteScalar,需要SQL,参数名数组,参数值数组
    Dim Name As Object = db.ExecuteScalar(SQL, {"@ProductID"}, {ProductID})
    appendText(String.Format("Product Name:{0}",  Name))
End Using


2、ExecuteReader

Dim  ProductID As Integer = 1
'创建DBHelper实例时不指定连接串,默认使用name="ConnectionString"的连接串
Using db As DBHelper = DBFactory.CreateDBHelper
        Dim SQL As String = "select *  from Production.Product where ProductID=@ProductID"
        '执行ExecuteReader,需SQL,参数名数组,参数值数组
        Dim dr As DbDataReader = db.ExecuteReader(SQL, {"@ProductID"}, {ProductID})
        If dr.Read Then
            appendText(String.Format("Product Name:{0}", dr("Name")))
        Else
            appendText("Product not found")
        End If
End Using


3、ExecuteNonQuery

         '创建DBHelper实例
         Using db As DBHelper = DBFactory.CreateDBHelper
            Dim Result AsInteger
            Try
                Dim sqlInsert As String = "Insert  into dbo.ErrorLog (UserName,ErrorNumber,ErrorMessage) values  (@UserName,@ErrorNumber,@ErrorMessage)"
                Result = 0
                For errorNumber As Integer = 9990 To 9999
                    '执行ExecuteNonQuery,需SQL,参数名数组,参数值数组,返回受影响的记录数
                    Result +=  db.ExecuteNonQuery(sqlInsert, {"@UserName", "@ErrorNumber", "@ErrorMessage"}, {"TestUser", errorNumber, "测试数据。" &  errorNumber})
                Next
                appendText(String.Format("Insert Result: {0}.",  Result))
            Catch ex As Exception
                appendText("Insert Error: " &  ex.Message)
            End Try
 
            Try
                Dim sqlUpdate As String = "update  dbo.ErrorLog set ErrorMessage=@ErrorMessage where  ErrorNumber=@ErrorNumber"
                Result =  db.ExecuteNonQuery(sqlUpdate, {"@ErrorMessage", "@ErrorNumber"}, {"更新后的测试数据。", 9999})
                appendText(String.Format("Update Result: {0}.",  Result))
            Catch ex As Exception
                appendText("Update Error: " &  ex.Message)
            End Try
 
            Try
                Dim sqlDelete As String = "delete  from dbo.ErrorLog where ErrorNumber=@ErrorNumber"
                Result = db.ExecuteNonQuery(sqlDelete, {"@ErrorNumber"},  {9990})
                appendText(String.Format("Delete Result: {0}.",  Result))
            Catch ex As Exception
                appendText("Delete Error: " &  ex.Message)
            End Try
         End Using


4、使用ReadTable方法取代Fill方法,风格与ExecuteXXX保持一致

         '创建DBHelper实例
         Using db As DBHelper = DBFactory.CreateDBHelper
            '将SQL的查询结果直接转换为数据表
            Dim t As DataTable = db.ReadTable("select  top 10 * from person.person")
            If t IsNot Nothing AndAlso t.Rows.Count > 0 Then
                For Each r As DataRowIn t.Rows
                    appendText(r)
                Next
            Else
                appendText("Table is empty.")
            End If
         End Using
 

原代码:https://github.com/alibary/DBHelper2.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值