最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > VBnet >
  • vb.net教程之在Visual Basic.NET使用ADO訪問數據庫

  • 2017-06-07 13:50 來源:未知
.NET中以 ADO.NET取代以前的ADO。用慣ADO的程序員怎樣在.NET中怎樣應用ADO呢?本人經過不斷的摸索,發現在.NET中ADO一樣可以用,并且很好用。現在結合Visual Basic.NET強大的類開發功能,本人將ADO開發成組件使用,效果非常理想。我使用的方法如下:

  啟動Visual Studio.NET。在新建項目中選擇Visual Basic項目,在模板中選擇類庫,在名稱中輸入類庫名稱如DataAccess.確定后,則進入類庫開發環境中,把Class1換名為ADOAccess。

  在項目菜單中加入引用,選擇COM頁,找到 Microsoft ActionX Data Object 20 Library 或更高版本。COM選項是Microsoft為了區分現在的.NET,兼容以前的開發方式而設置的,凡是.NET之前的組件都可在COM頁中可找到。

  在類名上面寫上Imports ADODB.Connection; Imports ADODB.Recordset ;Imports ADODB.CursorLocationEnum; Imports System.DBNull 4條引用語句,這里分別是引用ADO,ADO的宏定義,設置空值函數的來源。

  在類中定義一局部連接對象變量。 Private mCnnDB As New ADODB.Connection()
然后定義連接Access數據庫的過程. Access 數據庫用adUseClient指定,通過Microsoft.Jet.OLEDB數據訪問方式訪問數據庫,Microsoft.Jet.OLEDB又有多種版本,其中4.0是最高版本,它能訪問ACCESS 2000,所以這里的數據提供者指定為Microsoft.Jet.OLEDB.4.0。指定了本地數據庫和提供者后,就可打開一個數據庫了,用open方法實現。完整的代碼如下:

'作用: 連接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中設置DNS,在下面的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 With
End 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 With
End 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 With
End 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 = rec
End 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 rec
End 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 = rec
End 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 = i
End Function


  以上代碼編好后放在所定義的類中.下面的省略號代表上面的函數和過程。可直接生成為DLL組件。方法是在.NET編輯環境下選擇生成菜單中按生成就生成了DLL文件。然后,你可以直接調用該組件了。


Imports ADODB.Connection
Imports ADODB.Recordset
Imports ADODB.CursorLocationEnum
Imports System.DBNull '函數IsDBNull的來源
Class ADOAccess
Private mCnnDB As New ADODB.Connection()

End Class 

  調用上面生成的組件方法如下:在Visual Basic.NET中建立一項目,在窗口Form1中加入一AxMSFlexGrid網格命名為MsGrid1,布置如下

  然后引用剛建立的Dll。方法是選擇項目菜單的添加引用,選擇項目頁,按瀏覽找到其DLL文件確定后引用完成。在Form1中定義一ADOAccess對象,在Load事件中編寫調用代碼,分別測試其功能,代碼如下:


Public Class Form1
Inherits System.Windows.Forms.Form
Dim DB As New ADOAccess()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rec As New ADODB.Recordset()
'DB.ConnAccess("e:\test.mdb")
'DB.ConnSQLServer("wj-1058", "test")
'DB.ConnODBC("testODBC")
'DB.ConnOracle("wj-1059", "system", "manager")
'rec = DB.OpenTable("DEMO.customer")
rec = DB.OpenTable("doc_file")
DB.FillMsGrid(MSGrid1, rec)
End Sub 

  說明:

  1.你的機上要有Access數據庫文件(e:\test.mdb),MS Server數據庫中有數據庫test,doc_file 為test中的表,Oracle數據庫中有表DEMO.customer

  2. wj-1058為MS Server服務器名,wj-1059為Oracle服務器名,"system", "manager"分別為用戶名及口令。

  3. 一次僅連接一種數據庫。

  以上程序在Visual Studio.NET中調試通過。 

  總結:上面方法介紹了剛面世不久的Visual Basic.NET中有關數據庫的開發,ADO在Visual Basic.NET中的應用,連接幾種最實用的數據庫,且介紹了編寫組件的方法。

本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
北京赛车pk拾计算公式 总进球可以几场 十一运夺金中奖 官方天天捕鱼游戏下载 新时时历史开奖记录 梦见曾经喜欢的人给我赚钱 888德州扑克现金手机版 告别躺着赚钱拥抱创新 兴动哈尔滨麻将3011版本