Visual Basic.NET中访问数据
来源:互联网 发布:孙行者网络 编辑:程序博客网 时间:2024/05/21 09:44
'作用: 连接Access数据库
'参数: DBName 数据库名 Public Sub ConnAccess(ByVal DBName As String) Dim strDB As String mCnnDB.CursorLocation = adUseClient mCnnDB.Provider = "Microsoft.Jet.OLEDB.4.0" mCnnDB.Open(DBName, "Admin")End Sub
ODBC是一种广泛使用的连接多种数据库的方法,有万能钥匙之功效,但它需要通过ODBC先建立一个DNS,这里不作详细说明.有了DNS就可访问所连接的数据库。访问ODBC时先指明提供者,提供者只能为Microsoft 命名的MSDASQL,然后通过连接字符串指定数据源,用户名和密码,在下面的ConnectionString中指定,最后用open打开。由于ODBC分有用户名和无用户名两者,我们必须分别实现,借助类的函数名重载功能,我们编写两个同名的过程,完整的代码如下:
'作用: 连接ODBC数据库(不需指定用户和密码 ) '参数:dsnName为ODBC名 Public Sub ConnODBC(ByVal dsnName As String) mCnnDB.Provider = "MSDASQL" mCnnDB.ConnectionString = "Data Source='" & dsnName & "'" mCnnDB.Open() End Sub '作用: 连接ODBC数据库(需指定用户和密码 ) '参数:dsnName ODBC名,UserID 用户名,UserPwd 用户密码Public Sub ConnODBC(ByVal dsnName As String,
ByVal UserID As String,
ByVal UserPwd As String)
mCnnDB.Provider = "MSDASQL"
mCnnDB.ConnectionString = "Data Source='" & dsnName & "'
User ID='"& UserID & "';" & "Password='" & UserPwd & "
mCnnDB.Open()End Sub
SQL Server数据库是Microsoft开发的一种广泛使用的后台数据库。访问SQL Server可以通过指明ODBC驱动程序为SQL Server来实现,即在连接字符串中要有driver={SQL Server},由于它是后台数据库,所以必须指明SQL Server所在的计算机名,通常把它称为服务器,下面的ServerName就说明这点,然后指明是连接哪个数据库。其它的类似上面的ODBC。SQL Server的用户分为WIN NT 和授权用户,WIN NT用户是不需要指定用户名和密码的超级用户,否则要指明用户名和密码,这责定于SQL Server数据库管理员,在此不作详细说明,完整的代码如下:
'作用: 连接SQL Server数据库 '参数:ServerName 服务器名,DBName 数据库名Public Sub ConnSQLServer(ByVal ServerName As String,
ByVal DBName As String)
With mCnnDB .ConnectionString = "uid=;pwd= ;driver={SQL Server};" & _ "server=" & ServerName & _ ";database=" & DBName .Open() End WithEnd Sub
'作用: 连接SQL Server数据库'参数:ServerName 服务器名,DBName 数据库名,UserID 用户名
UserPwd 用户密码
Public Sub ConnSQLServer(ByVal ServerName As String,
ByVal DBName As String,
ByVal UserID As String,
ByVal UserPwd As String)
With mCnnDB.ConnectionString = "uid=’” & UserID & “’;pwd=’” &
UserPwd &”’;driver={SQL Server};" & _
"server=" & ServerName & _ ";database=" & DBName .Open() End WithEnd Sub
Oracle数据库是目前最有影响的一种广泛使用的后台数据库。访问Oracle先指明其提供者MSDAORA。Oracle与Sql Server不同的是它不是通过数据库来管理的,所以它不需指明数据库,但它连接时必须指明用户,即使是超级用户也如此,这是它的安全性能高于Sql Server的理现之一,所以我们只须编写一个过程。其它类似。完整的代码如下:
'作用: 连接Oracle数据库'参数:ServerName 服务器名,DBName 数据库名,UserID 用户名,UserPwd 用户密码Public Sub ConnOracle(ByVal ServerName As String, ByVal UserID As String, ByVal UserPwd As String) With mCnnDB .Provider = "MSDAORA" .ConnectionString = "User ID='" & UserID & "';" & _ "Password='" & UserPwd & "';" & _ "Data Source='" & ServerName & "'" .Open() End WithEnd Sub
有了上面的连接数据库的方法,我们就直接可读写数据了。下面利用ADO扩充读写数据的函数。ADO在访问表时要指明其光标类型和锁类型,且指定不同其权限就不同,权限分为读写二种,这里我们编写的是有读写权限的通用的函数,所以我们指定光标CursorType为adOpenKeyset,锁为开锁adLockOptimistic,.net需指明其来源,这是为什么开始要有 “Imports ADODB.CursorLocationEnum”语句的原因。有了这些,就可通过执行查询语句来打开一个表。打开表后,我们判断表是否为空表,不是则移动记录至尾后再现移至记录头(这是为了可以访问其中每条记录,特别是用RecordCount求记录数时不至有时返回-1的关键),最后返回一个记录集,完整的代码如下:
'作用:连接表'参数:TableName表名'返回:记录集Public Function OpenTable(ByVal TableName) As ADODB.Recordset Dim strSql As String Dim rec As ADODB.Recordset rec = New ADODB.Recordset() rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic strSql = "SELECT * FROM " & TableName rec.Open(strSql, mCnnDB) '打开记录集 If Not rec.EOF Then rec.MoveLast() rec.MoveFirst() End If OpenTable = recEnd Function
下面是扩充上面函数的功能,可以跟据条件访问单个表。Public Overloads Function OpenTable(ByVal TableName As String, ByVal strWhere As String) As ADODB.Recordset Dim strSql As String Dim rec As ADODB.Recordset rec = New ADODB.Recordset() rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic strSql = "SELECT * FROM " & TableName & " where " & strWhere rec.Open(strSql, mCnnDB) '打开记录集 If Not rec.EOF Then rec.MoveLast() rec.MoveFirst() End If Return recEnd Function
我们继续扩充访问表的功能。有时要打开多个表,读写其中的数据,我们可以通过建立查询视图实现,其它类似上面的OpenTable,完整的代码如下:
'作用:连接多表'参数:strSQL'返回:记录集Public Function ExecuteSQL(ByVal strSql As String) As ADODB.Recordset Dim rec As New ADODB.Recordset() rec.CursorType = ADODB.CursorTypeEnum.adOpenKeyset rec.LockType = ADODB.LockTypeEnum.adLockOptimistic rec.Open(strSql, mCnnDB) '打开记录集 ExecuteSQL = recEnd Function
下面编写了一个用记录集填充AxMSFlexGrid网格的过程。其中函数RecordCount是我自己编写的求记录集中记录数据的函数。这里不能直接用ADO的RecordCount求得。如果记录集是空,则退出过程。否则求出记录集的记录数和字段数据用来确定AxMSFlexGrid网格的行列数据,然后读出记录集的数据直接填充到AxMSFlexGrid网格。要说明的是读出记录集的数据时要先判断是否为空值,由函数IsDBNull实现(函数IsDBNull来源于System.DBNull).最后记录集应该返回到记录首位,否则影响了原有的记录集,完整的代码如下:'作用:用记录集的数据填充网格'参数:MSGrid 网格对象,rec 记录集对象Public Sub FillMsGrid(ByVal MSGrid As AxMSFlexGridLib.AxMSFlexGrid, ByVal rec As ADODB.Recordset) Dim i, j, RecordNum As Integer If rec.EOF Then Exit Sub RecordNum = RecordCount(rec) MSGrid.Rows = RecordNum + 1 MSGrid.Cols = rec.Fields.Count + 1 For i = 0 To RecordNum - 1 For j = 0 To rec.Fields.Count - 1 If IsDBNull(rec(j).Value) Then MSGrid.set_TextMatrix(i + 1, j + 1, "") Else MSGrid.set_TextMatrix(i + 1, j + 1, rec(j).Value) End If Next MSGrid.set_TextMatrix(i + 1, 0, i) rec.MoveNext() Next
rec.MoveFrist()
End Sub
'作用:取记录集的记录数'参数:rec 记录集对象'返回:记录集的记录数Public Function RecordCount(ByVal rec As ADODB.Recordset) As Integer Dim i As Integer If rec.EOF Then RecordCount = 0 Exit Function End If With rec .MoveFirst() Do While Not .EOF i += 1.MoveNext()
Loop .MoveFirst() End With RecordCount = iEnd Function
以上代码编好后放在所定义的类中.下面的省略号代表上面的函数和过程。可直接生成为DLL组件。方法是在.net编辑环境下选择生成菜单中按生成就生成了DLL文件。然后,你可以直接调用该组件了。
Imports ADODB.ConnectionImports ADODB.RecordsetImports ADODB.CursorLocationEnumImports System.DBNull ‘函数IsDBNull的来源Class ADOAccessPrivate mCnnDB As New ADODB.Connection()…End Class- Visual Basic.NET中访问数据
- Visual Basic.NET访问数据方法
- Visual Basic.NET中使用ADO访问数据库
- 使用 Visual Basic .NET 访问注册表
- 使用 Visual Basic .NET 访问注册表
- Visual Basic .Net中实现HTTP协议
- 使用Visual Basic .NET 访问 google 的 Web 服务
- 使用 Visual Basic .NET 访问 Google 的 Web 服务(MS)
- 使用 Visual Basic .NET 访问 Google 的 Web 服务
- Visual Basic.net
- Visual Basic .NET 入门
- 精通 Visual Basic .NET
- Mastering Visual Basic .NET
- Visual Basic.NET探密
- Visual Basic.NET探密
- Visual Basic.NET探密
- 什么是Visual Basic.NET?
- Visual Basic.NET探密
- 请教如何将c++程序转换成java程序?
- ASP.NET中使用Server.Transfer()方法在页间传值
- 构建跨平台的自由桌面开发环境(C/C++)(一、软件介绍)
- 构建跨平台的自由桌面开发环境(C/C++)(二)软件安装和配置
- 地球上真的有外星人...
- Visual Basic.NET中访问数据
- ASP.NET 1.1 模拟 2.0 网页母板文件
- 关于win2000各种服务的简要说明
- 自信与成功有约
- ハワイの不動産は今が、お買い時チャンスです。
- 软件更新(2005.06.04)
- ハワイの不動産は今が、お買い時チャンスです。
- asp.net 和vb.net 怎样去做呢 高手请指点 有分全散
- 我怎么发帖子阿,老大们!