SQL Help是什么?
其实就是一个对数据库操作方法的包装,类似增删改查这样的操作。不知道大家还记不记得以前我们在敲学生信息管理系统的时候在模板里写的数据库连接的代码吗?尽管已经将一些操作放在模板里了,可是我到现在还能想起自己那时候不知道敲了多少个cnn,msgtxt,txtsql这样的东东。
有什么?
这里需要大家了解几个名词,他可以帮助我们更好地使用SQLHelp来操作数据库。
1. SqlDataAdapter
SqlDataAdapter是 DataSet和 SQLServer之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的TSQL语句映射 Fill(它可更改DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。当SqlDataAdapter填充 DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)
2.DataSet
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。
3.DataTable
这个相信大家都不陌生了,我就不一一赘述了。
如何使用这三者?
在使用之前我们需要了解这三者之间的关系。
SqlDataAdapter>DataSet>DataTable
用SqlDataAdapter的fill属性包容DataSet,通常写作SqlDataAdapter.fill(DataSet)
用DataSet的table属性包容DataTable,通常写作DataSet.table(DataTable)
知道他们是什么了,我们用机房登录开始实战吧?
Public Class SqlHelper
Private ReadOnly strConnection As String = ConfigurationManager.AppSettings("strCon")
'数据库连接
Dim con As SqlConnection = New SqlConnection(strConnection)
Dim cmd As New SqlCommand
'执行增删改,返回类型为boolean来确认是否执行成功(有参数)
Public Function ExeAddDeUpdate(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Boolean
cmd.Parameters.AddRange(paras)
cmd.CommandText = cmdText
cmd.CommandType = cmdType
cmd.Connection = con
'执行数据库
Try
con.Open()
Return cmd.ExecuteNonQuery
Catch ex As Exception
Return 0
Finally
cmd.Dispose() '释放所有的资源
con.Close() '数据库关闭
End Try
End Function
'没有参数的增删改
Public Function ExeAddDeUpdate(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer
cmd.CommandText = cmdText
cmd.CommandType = cmdType
cmd.Connection = con
'执行数据库
Try
con.Open()
Return cmd.ExecuteNonQuery
Catch ex As Exception
Return 0
Finally
cmd.Dispose() '释放所有的资源
con.Close() '数据库关闭
End Try
End Function
'有参数的查询
Public Function ExeSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable
Dim sqlAtapter As SqlDataAdapter '定义一个桥接器变量,用来联系dataset和SQL数据库
Dim dt As New DataTable '
Dim ds As New DataSet '用来保存满足要求的数据
cmd.Connection = con
cmd.CommandType = cmdType
cmd.CommandText = cmdText
cmd.Parameters.AddRange(paras)
sqlAtapter = New SqlDataAdapter(cmd) '实例化满足要求的桥接器
Try
sqlAtapter.Fill(ds)
dt = ds.Tables(0)
cmd.Parameters.Clear() '清除数据,方便下次使用
Catch ex As Exception
MsgBox("查询失败")
Finally
cmd.Dispose()
con.Close()
End Try
Return dt '将符合的结果返回
End Function
'没有参数的查询
Public Function ExeSelect(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
Dim sqlAtapter As SqlDataAdapter '定义一个桥接器变量,用来检索和保存数据
Dim dt As New DataTable '
Dim ds As New DataSet '用来保存满足要求的数据
cmd.Connection = con
cmd.CommandType = cmdType
cmd.CommandText = cmdText
sqlAtapter = New SqlDataAdapter(cmd)
Try
sqlAtapter.Fill(ds) '用ds填充桥接器
dt = ds.Tables(0)
Catch ex As Exception
Return Nothing
Finally
cmd.Dispose()
con.Close()
End Try
Return dt '结果返回
End Function
End Class
总结:说实话弄这个七层的时候我就真真的收到了打击,感觉自己在计算机方面就是没有开窍似得,尤其是各种变量和参数在哪里来回倒腾我就觉得头都大了。直到我弄这个的时候,头脑里头好像慢慢清晰了许多。其实这么多的层和类,都可以简化成一个,永远是实例化对象,调用其它层的方法,利用变量传参交流。