昨天机房验收,师父问了我几个关于数据库方面的问题,我支支吾吾答不上来,好多就是知道是什么意思,就是不知道官方用语怎么说,这下可为难了。下来以后,查了查,权当温故而知新了。
ADO(ActiveXData Object)是优化的访问数据库的专用对象集。想了半天也找不到合适的词去理解这个,自己简单的理解为了接口,为了和数据库连接,声明一些对象,然后通过参数的传递去实现这些对象。(个人浅理解)
其中这七个对象分为(3个独立对象和依赖独立对象才能使用的4个非独立对象)
上面的七个对象简单的了解一下,知识还是贵在实践啊。所以师父建议我结合两版机房的数据库连接部分进行对比一下。VB 6.0和VB.NET,这两个在控件的使用还有属性的设置方面还是没有多大的变化的,个人认为区别最大的就是:VB6.0是面向过程的,VB.NET是面向对象的,很好的降低了代码和功能之间的耦合性,便于后期的扩展和维护。下面就看看VB版和VB.NET版关于D层是怎么样设置的。
首先利用抽象的思维,在模块里抽象出了一个执行SQL语句的方法。不得不说这点类似与VB.NET版中的SQLHelper。
<span style="font-family:KaiTi_GB2312;font-size:18px;">'数据库的连接,以文件DSN标记,访问ODBC数据源 Public Function ConnectString() As String ConnectString = "FileDSN=charge.dsn;UID=sa;PWD=123" '保证数据库登录信息与访问信息一致 ' ConnectString = "provider=sqloledb;server=192.168.26.26;UID=sa;PWD=123456;database=charge_sys" End Function Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset '执行SQL和返回记录集 Dim cnn As ADODB.Connection '建立数据库的连接。 Dim rst As ADODB.Recordset '声明一个记录集 Dim sTokens() As String On Error GoTo ExecuteSQL_Error sTokens = Split(SQL) Set cnn = New ADODB.Connection cnn.Open ConnectString '如果是增、删、改这些操作就执行SQL语句; If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then '非Slect语句 cnn.Execute SQL '数据量不大时,可以在连接上,直接执行SQL语句 MsgString = sTokens((0)) & "query successful" '虽然MsgString不是返回值,但传递方式是ByRef,实参地址和这个地址相同 Else 'Select语句 Set rst = New ADODB.Recordset rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic '得到临时表,游标指向第一条记录 '得到记录条数 Set ExecuteSQL = rst MsgString = "查询到" & rst.RecordCount & "条记录" End If ExecuteSQL_Exit: Set rst = Nothing Set cnn = Nothing Exit Function ExecuteSQL_Error: MsgString = "查询错误:" & Err.Description Resume ExecuteSQL_Exit End Function</span>
采用了运用配置文件去连接数据库。SQLHelper封装了对数据库的增删改查。
<span style="font-family:KaiTi_GB2312;font-size:18px;"> '定义全局变量,设置连接 Shared conn As SqlConnection = New SqlConnection(ConnectionString) '定义全局cmd命令 Shared cmd As New SqlCommand</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> 'configurationManager表示读配置文件; 'appsetting获取配置文件的数据; 'Shared ConnectionString As String = ConfigurationManager.AppSettings("sqlConnectStr") '这里需要注意配置文件读取ConnectionString时,内容需要进行字符串的转换。 Shared ConnectionString As String = ConfigurationManager.ConnectionStrings("sqlConnectStr").ToString()</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> <connectionStrings> <add name="sqlConnectStr" connectionString="Data Source=ZLT;persist security info=False;Initial Catalog=ComputerCharge_sys;User ID=sa;Password=123" providerName="System.Data.SqlClient" /> </connectionStrings></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> '对于关闭连接,重新定义一个函数 ''' <summary> ''' 关闭连接 ''' </summary> ''' <param name="conn"></param>'需要关闭的连接 ''' <remarks></remarks> Public Shared 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></remarks> Public Shared Sub CloseCmd(ByVal cmd As SqlCommand) If Not IsNothing(cmd) Then cmd.Dispose() '销毁 cmd = Nothing End If End Sub</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> ''' <summary> ''' 执行增删改三个操作,(无参) ''' </summary> ''' <param name="cmdText"></param>执行增删改查SQL语句或者存储过程 ''' <param name="cmdType"></param>命令类型文本或者是存储过程 ''' <returns>interger,受影响的行数</returns> ''' <remarks></remarks> Public Shared Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer '为要执行的命令cmd赋值 cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = conn Dim result As Integer '执行操作 Try conn.Open() result = cmd.ExecuteNonQuery() Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return result '返回受影响的行数 End Function</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> ''' <summary> ''' 执行非查询操作(增删改)有参数 ''' </summary> ''' <param name="cmdText"></param>执行增删改查SQL语句或者存储过程; ''' <param name="cmdType"></param>命令类型文本或者是存储过程; ''' <param name="paras"></param>参数数组,无法确认有多少参数 ''' <returns></returns> ''' <remarks></remarks> Public Shared Function ExecuteNoQuery(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As Integer '将传入的值,分别为cmd的属性赋值 Dim result As Integer '定义变量用来存放执行的结果 cmd.Parameters.AddRange(paras) '将参数传入 cmd.CommandType = cmdType '设置一个值,解释cmdtext cmd.Connection = conn '设置连接,全局变量 cmd.CommandText = cmdText '设置查询语句 Try conn.Open() '打开连接 result = cmd.ExecuteNonQuery() '执行增删改操作 cmd.Parameters.Clear() '清楚参数 Catch ex As Exception MsgBox(ex.Message, , "数据库操作") '如果出错,返回0 Finally '关闭数据库连接 Call CloseConn(conn) Call CloseCmd(cmd) End Try Return result '返回受影响的行数 End Function</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> ''' <summary> ''' 执行增删改三个操作,(无参) ''' </summary> ''' <param name="cmdText"></param>执行增删改查SQL语句或者存储过程 ''' <param name="cmdType"></param>命令类型文本或者是存储过程 ''' <returns>interger,受影响的行数</returns> ''' <remarks></remarks> Public Shared Function ExecAddDelUpdateNo(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer '为要执行的命令cmd赋值 cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = conn Dim result As Integer '执行操作 Try conn.Open() result = cmd.ExecuteNonQuery() Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally Call CloseConn(conn) Call CloseCmd(cmd) End Try Return result '返回受影响的行数 End Function</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> ''' <summary> ''' 执行查询的操作,(有参),参数不限 ''' </summary> ''' <param name="cmdText"></param>执行增删改sql语句或者存储过程 ''' <param name="cmdType"></param>文本类型或者存储过程 ''' <param name="paras"></param>传入的参数 ''' <returns></returns> ''' <remarks></remarks> Public Shared Function ExecSelect(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable Dim sqlAdapter As SqlDataAdapter Dim dt As New DataTable Dim ds As New DataSet '还是给cmd赋值 cmd.CommandText = cmdText cmd.CommandType = cmdType cmd.Connection = conn cmd.Parameters.AddRange(paras) '参数添加 sqlAdapter = New SqlDataAdapter(cmd) '实例化adapter Try sqlAdapter.Fill(ds) '用adapter将dataSet填充 dt = ds.Tables(0) 'datatable为dataset的第一个表 cmd.Parameters.Clear() '清除参数 Catch ex As Exception MsgBox(ex.Message, , "数据库操作") Finally '销毁cmd释放资源 Call CloseCmd(cmd) End Try Return dt End Function</span>
1、VB版用了ODBC进行数据库的连接;ODBC为一个数据库访问协议,提供了访问数据库的接口,不直接与DBMS交互。VB.NET用了ADO技术直接对DBMS进行操作,不需要注册数据源,具有很好的移植性。
2、VB版和VB.NET版大致是一样的。只是IDE环境不一样。在对数据库封装上个人认为是一致的。
1、知识是反复的,需要我们不断的重复。
2、多多对比,有时候收获甚微,但是记忆深刻。
感谢您的宝贵时间~~~