经过学习,通过线敲登录的三个例子,敲四行CRUD样品,因此,访问数据库多次,在这些链接库、打开都一样。只是不同的操作将针对不同的表进行。始学习面向对象的思想。当让要对这些不变的要内容要进行打包,提高代码复用。

所以就了解到了SQLHlper。这是对数据库连接以及操作的封装,我们在使用的时候仅仅须要传入參数就能打开数据库。对对应的表进行操作。

自己的SQLHlper借鉴了“巨人”的经验,同一时候也做了自己的改进。以下来看一下我的SQLHlper。

首先对数据库的链接须要使用连接字符串和command命令

<span style="color:#009900;">'有參数的非查询操作    当中的參数CommandType 表示怎样解释命令字符串</span>
Public Shared Function ExecuteNoQuery(ByVal cmdtxt As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer
<span style="color:#33ff33;"> </span><span style="color:#009900;">'定义链接的字符串,同一时候使用配置文件对ConnStr进行配置</span>
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")
<span style="color:#009900;">'定义一个链接,他的參数是建立的链接字符串</span>
Dim conn As SqlConnection = New SqlConnection(strConnStr)
<span style="color:#009900;"> '定义一个命令,cmdtxt參数是sql语句,conn是对数据库的链接字符串</span>
Dim cmd As SqlCommand= New SqlCommand(cmdtxt, conn)
cmd.CommandType = cmdType <span style="color:#009900;">'定义command命令的类型</span>
cmd.Parameters.AddRange(paras) <span style="color:#009900;">'加入參数</span>
Return NoSelectResult(conn, cmd) <span style="background-color: rgb(255, 255, 255);"><span style="color:#009900;">'这一部分是调用的抽象出来的函数</span></span>
End Function <span style="color:#009900;">'运行有參数的查询</span>
Public Shared Function GetDataTable(ByVal cmdTxt As String, cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
<pre name="code" class="vb">        <span style="color:#009900;">'定义使用程序配置的字符串,连接数据库</span>
Dim strConnStr As String = System.Configuration.ConfigurationManager.AppSettings("ConnStr")  
        Dim conn As SqlConnection = New SqlConnection(strConnStr) <span style="color:#009900;"> '定义一个新的sql连接字符串</span>
Dim cmd As SqlCommand = New SqlCommand(cmdTxt, conn) <span style="color:#009900;">'定义一个新的sqlCommand命令</span>
Dim Adataset As New DataSet <span style="color:#009900;">'定义一个DataSet能够用来储存查到的结果</span>
Dim adaptor As SqlDataAdapter <span style="color:#009900;"> '用将查到的结果填到DataSet中</span>
Dim adatatable As New DataTable <span style="color:#009900;"> '定义新的表。在DataSet中能够存放多张表</span> adaptor = New SqlDataAdapter(cmd) <span style="color:#009900;">'得到cmd运行的结果</span>
cmd.CommandType = cmdType <span style="color:#009900;">'定义CommandType的类型</span>
cmd.Parameters.AddRange(paras) <span style="color:#009900;">'将要使用的參数加入到command命令中</span> Return SelectResult(conn, adaptor, Adataset)
End Function

以上分别为有參数的非查询和查询的SQLHlper的函数,相应的没有參数非查询和查询的仅仅须要将參数部分的定义去掉就好。

例如以下是自己改进的部分,抽象出来推断数据库链接情况和运行command命令的,由于四种情况都会用到并且没有变化。所以能够把不变的这部分抽象出来。

<span style="color:#009900;">'查询的能够调用</span>
Public Shared Function SelectResult(ByVal conn As SqlConnection, ByVal adaptor As SqlDataAdapter, ByVal Adataset As DataSet) As DataTable
Try
If conn.State = ConnectionState.Closed Then <span style="color:#009900;">'推断链接的状态,假设是关闭的则打开</span>
conn.Open()
adaptor.Fill(Adataset)<span style="color:#009900;"> '然后将查询到的结果填入到定义好的DataSet中</span>
End If
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
If conn.State = ConnectionState.Open Then <span style="color:#009900;">'最后推断链接的状态。假设是开着的则关闭</span>
conn.Close()
End If
End Try
Return Adataset.Tables(0) <span style="color:#009900;">'返回DataSet中的表</span>
End Function <span style="color:#009900;"> '非查询的能够调用</span>
Public Shared Function NoSelectResult(ByVal conn As SqlConnection, ByVal cmd As SqlCommand) As Integer
Dim res As Integer
Try
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
res = cmd.ExecuteNonQuery() <span style="color:#009900;">'运行非查询动作,将受影响的行数返回</span>
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
Return res
End Function

小结

对于SQLHlper本身的代码部分的理解是没有难度的,通过SQLHlper能进一步的认识到面向对象的优点,并且自己也试着简单的抽象一些东西。SQLHlper好像是自己做好的一个零件,当它被须要时就能够直接的拿去使用。而它本身又能够由别的零件组成。不仅提高了代码的复用性,并且在做改动的时候能够改动须要改动的“零件”。解耦和的优点啊。还须要在实践中有许多其他的经验。!!

版权声明:本文博主原创文章,博客,未经同意不得转载。

05-07 15:30