【机房个人重构】sqlHelper------让我们的代码更高效

         机房过程中,发现了很多高效的事情,如果一个事情,要做2遍以上,就要想办法抽象出来,提高自己的效率,不做无谓的ctrl+V ctrl+C!


         sqlHelper就是一个很好的应用,下面我来细细分解~

 

  What?是什么

         

             SqlHelper是一个基于.NETFramework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化你重复的去写那些数据库连接SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

               SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。 -------百度百科

 

成员:

 


 

我的:

 


 

HOW?怎么做

     

1、配置项

      

在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。

 

<p style="margin:0in;font-family:Calibri;font-size:16.0pt" lang="en-US">  </p><p style="margin:0in;font-family:Calibri;font-size:16.0pt"><connectionStrings></p><p style="margin:0in;font-size:16.0pt"><span style="font-family:Calibri"><!--SqlServerHelper</span><span style="font-family:华文楷体">连接字符串设定</span><span style="font-family:Calibri">--></span></p><p style="margin:0in;font-family:Calibri;font-size:16.0pt"><span lang="zh-CN"><add</span><span lang="en-US"> </span><span lang="zh-CN">connectionString="server=.;uid=sa;pwd123456;database=yourdatabase"name="SqlServerHelper"/></span></p>


在我的机房里是这样写的:

 

  <connectionStrings>
    <addname="UI.My.MySettings.ChargeConnectionString"connectionString="Data Source=TXB;Initial Catalog=Charge;Persist SecurityInfo=True;User ID=sa;Password=1" providerName="System.Data.SqlClient"/>


其他数据库的连接字符串设定:

 

<!--Oracle连接字符串设定-->

<addconnectionString="Data Source=orcl;User Id=system;Password=***;IntegratedSecurity=no"  name="OracleHelper"/>


<!--MySql连接字符串设定-->

<addconnectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase"name="MySqlHelper"/>


</connectionStrings>


<!--access连接字符串设定-->

<addconnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=F:\mdbFilePath\db.mdb;Jet OLEDB:Database Password=123"name="MySqlHelper"/>

</connectionStrings>

 

2、静态方式

  

        静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只执行一个简单的查询语句时,显的更简单      

      

//查询语句执行:

DataTabledt=SqlServerHelper.ReadTable("select * from table1");

//插入语句执行:

SqlServerHelper.ExecuteNonQuery("insertinto [students] values(@student_name,@class),

SqlServerHelper.CreateInputParameter("@student_name",SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),

SqlServerHelper.CreateInputParameter("@class",SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)

);

 

我的代码:

 

Imports System.Data.SqlClient

Public Class SqlHelper

    '利用配置文件寻找连接字符串,建立cmd文件  
    '定义变量,获得数据库连接字符串    
    '定义cmd命令  
    Private ReadOnly constr As String = System.Configuration.ConfigurationSettings.AppSettings("strConn")
    Dim conn As New SqlConnection(constr)
    Dim cmd As New SqlCommand

    '一共是四个自定义的函数,但是只有两个方法名  
    '系统会自动根据参数的不同,是否有参数,决定调用哪一个方法  
    '就是方法的名字相同,但是参数不同  

    'cmdText——用来传递SQl语句  
    'cmdType——决定Command如何解释CommandText属性的内容默认取值为Text,即SQL语句  
    'sqlParameters——是CommandText属性所指定的SQL语句或存储过程的参数集合  

    '查询操作,带参数,返回结果是表  
    Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter()) As DataTable
        '建立数据库连接  
        cmd = conn.CreateCommand()

        '将该函数的三个参数,分别赋给相应的对象  
        '设置具体的sql语句  
        '设置解释CommandText的方式  
        '设置具体的执行参数  
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Parameters.AddRange(sqlparams)

        '定义数据适配器变量,并实例化,将cmd绑定在adapter上面  
        '定义数据缓存变量  
        '定义变量返回数据表  
        Dim sqlAdapter As New SqlDataAdapter(cmd)
        Dim ds As New DataSet
        Dim dt As New DataTable

        Try
            '打开连接  
            '用adapter将dataset填充  
            '返回查询的结果,数据表  
            conn.Open()
            sqlAdapter.Fill(ds)
            dt = ds.Tables(0)

            '捕获,并且抛出该异常  
            'Exception——系统抛出的异常  
            'ex——通过ex,显示该异常内容  
        Catch ex As Exception
            'If ex.Message = "无法找到表 0。" Then
            '    Return Nothing
            '    Exit Try
            'End If
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function

    '查询操作,不带参数,返回结果是表  
    Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
        cmd = conn.CreateCommand()
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType

        '定义数据适配器变量,并实例化,将cmd绑定在adapter上面  
        '定义数据缓存变量  
        Dim sqlAdapter As New SqlDataAdapter(cmd)
        Dim ds As New DataSet
        Dim dt As New DataTable

        Try
            conn.Open()
            sqlAdapter.Fill(ds)
            dt = ds.Tables(0)
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        Return dt
    End Function

    '增删改操作,带参数,没有返回结果  
    Public Function NoReturn(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter())

        cmd = conn.CreateCommand
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType
        cmd.Parameters.AddRange(sqlparams)
        Dim i As Integer
        Try
            conn.Open()
            i = cmd.ExecuteNonQuery()
            If i > 0 Then
                Return True
            Else
                Return False
            End If

        Catch ex As Exception
            MsgBox(ex.Message)
            'Catch
            '    MsgBox("该条数据已存在,请勿重复添加", , "温馨提示")
        Finally
            Call CloseConn(conn)
            Call CloseCmd(cmd)
        End Try
        'Return True
    End Function

    '增删改操作,不带参数,没有返回结果  
    Public Function NoReturn(ByVal cmdText As String, ByVal cmdType As CommandType)
        cmd = conn.CreateCommand
        cmd.CommandText = cmdText
        cmd.CommandType = cmdType

        Try
            conn.Open()
            cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox(ex.Message, , "数据库操作")
        Finally
            Call CloseConn(conn)
        End Try
        Return True
    End Function

    ''' <summary>    
    ''' 关闭连接    
    ''' </summary>    
    '''<param name="conn ">需要关闭的连接</param>    
    '''<remarks>2015-3-29 17:22:31</remarks>    
    Public Sub CloseConn(ByVal conn As SqlConnection)
        If (conn.State <> ConnectionState.Closed) Then '如果没有关闭    
            conn.Close()                               '关闭连接    
            conn = Nothing                             '不指向原对象    
        End If
    End Sub

    ''' <summary>    
    ''' 关闭命令    
    ''' </summary>    
    '''<param name="cmd ">需要关闭的命令 </param>    
    '''<remarks>2015-3-29 17:22:31</remarks>    
    Public Sub CloseCmd(ByVal cmd As SqlCommand)
        If Not IsNothing(cmd) Then  '如果cmd命令存在    
            cmd.Dispose()           '销毁    
            cmd = Nothing
        End If
    End Sub
End Class

【总结】

            当一件事情重复2遍的去做时,学会思考,如何高效率的去做。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值