数据访问接口有三种:
1、ActiveX数据对象(ADO)
2、远程数据对象(RDO)
3、数据访问对象(DAO)
1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server
1)使用ADO控件连接
使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语句的字符串,用于指定建立与数据源连接的信息,语法如下:
Provider=Drive;Password=UserPassword;PersistSecurity Info=False;User ID=UserName;Initial Catalog=Data Name;DataSource=ServerName
例:使用ADO控件连接名为student的数据库
Private Sub Form_Load() Adodc1.connectionstring="Provider=SQLOLEDB.1;Password=;PersistSecurity Info=False;User ID=sa;Initial Catalog=student;Data Source=." End Sub
2)使用ADO对象连接
ADO的数据库访问技术,不仅可以通过VB提供的控件实现,还可以通过ADO相关的对象实现。ADO对象包括了command对象、connection对象、recordset对象、Error对象、field对象、parameter对象、property对象,其中,connection对象是用来管理与数据库的连接的
例:使用connection对象的Open方法连接名为student的数据库
Dim cnn as ADODB.Connection Privatesub Form_Load() set cnn=New ADODB.Connection Cnn.open="provider=SQLOLEDB;password=;PersistSecurity Info=true;User ID=sa;Initial Catalog=student;Data Source=." End Sub
2.使用DAO(Data Access Object,数据访问对象)连接SQL Server
使用DAO连接SQL Server可以使用VB提供的Data控件实现,使用其访问SQL Server时需要掌握connect属性用于定义所要连接数据库的类型,由于Data控件采用的是Access/Jet为数据引擎,所以访问SQL Server时需要用ODBC间接访问
connect属性访问ODBC时的字符串格式设置:
ODBC;DataBase=DataName;UID=UserName;PWD-UserPassword;DSN=DataSourceName
例:用Data控件通过ODBC中的studentinfo数据源连接名为student的数据库
PrivateSub Form_Load() Data1.connect="ODBC;DataBase=student;UID=sa;PWD=123;DSN=studentinfo" End Sub
确保下载的SQLite动态链接库与您使用的平台相匹配,对于VB.net必须使用.NET Framework,这里选.NET Framework 2.0版本。SQLite动态链接库下载地址见本文后的注意事项。
Visual Studio中新建VB.net Windows窗体应用程序。
将下载的SQLite动态链接库文件拷贝到VB.net目标应用程序目录下,注意只需要System.Data.SQLite.dll和SQLite.Interop.dll这2个文件即可。
VB.net工程下,添加对System.Data.SQLite的引用,并导入System.Data.SQLite导入到命名空间。
设计前面板。这里作为示例,添加了1个标签用于显示数据库查询的内容,1个建表按钮、1个插记录按钮、1个改记录按钮、1个查记录按钮分别进行部分数据库操作。
编辑后面板。注意必须在全局声明中导入System.Data.SQLite命名空间;Form1_Load事件中,使用连接字符串建立VB.net和数据库文件之间的连接,具体语法如下:
Imports System.Data.SQLite
Imports System.IO
Public Class Form1
Dim conn As New SQLiteConnection
Dim sqlcmd As New SQLite.SQLiteCommand
Dim sqlreader As SQLiteDataReader
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim S As String = Directory.GetCurrentDirectory & "\db"
conn.ConnectionString = "Data Source=" & S
conn.Open()
sqlcmd.Connection = conn
End Sub
End Class
建立数据库连接后,可以进行数据库操作,基本的套路就是写SQL语句,然后执行。像建表、插记录、改记录这类操作,是不需要返回数据的,所以用.ExecuteNonQuery()方法,而查记录操作,是需要返回数据的,必须用.ExecuteReader()方法返回数据给一个数据读取对象,然后使用.Read()方法读取一条记录,继而根据类型读取相应的变量。
示例:
'建表
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
sqlcmd.CommandText = "CREATE TABLE TEST ( 工号 INT, 姓名 CHAR(10), 出生年月 DATETIME, 家庭住址 CHAR(100) )"
sqlcmd.ExecuteNonQuery()
End Sub
'插记录
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
sqlcmd.CommandText = "INSERT INTO TEST VALUES ( 1, '张三', '1983-3', '山东省青岛市')"
sqlcmd.ExecuteNonQuery()
End Sub
'改记录
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
sqlcmd.CommandText = "UPDATE TEST SET 家庭住址='山东省潍坊市' WHERE 姓名='张三'"
sqlcmd.ExecuteNonQuery()
End Sub
'查记录
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
sqlcmd.CommandText = "SELECT * FROM TEST"
sqlreader = sqlcmd.ExecuteReader
sqlreader.Read()
Label1.Text = "姓名:" & sqlreader.GetString(1) & vbCr & _
"工号:" & sqlreader.GetInt16(0) & vbCr & _
"出生年月:" & sqlreader.GetString(2) & vbCr & _
"家庭住址:" & sqlreader.GetString(3) & vbCr
End Sub
为了方便调试,建议使用SQLite Studio管理工具随时查看数据库操作的过程。
用于VB.NET的SQL数据库连接类
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Public Class dataBase
Public cnStr As String
Private _conn As New SqlClient.SqlConnection
Private _cmd As New SqlClient.SqlCommand
Private _sql As String
Public Function getConnectString() As String '返回连接数据库字符串
cnStr = System.Configuration.ConfigurationManager.AppSettings("cnstr")
Return cnStr
End Function
Public Sub Open() '打开数据库连接
Dim connStr As String
connStr = getConnectString()
_conn = New SqlConnection(connStr)
_conn.Open()
End Sub
Public Sub Close() '关闭数据库连接
_conn.Dispose()
_conn.Close()
End Sub
Public Sub RunSql(ByVal sql As String) '执行SQL语句
Open()
Dim cmd As New SqlCommand(sql, _conn)
cmd.ExecuteNonQuery()
Close()
End Sub
Public Function getDataSet(ByVal sql As String) As DataSet '返回Dataset
Open()
Dim rs As New SqlDataAdapter(sql, _conn)
Dim ds As New DataSet
rs.Fill(ds)
Return ds
End Function
End Class
操作实例:
将有基于VB.Net的数据库的操作整理如下,或许不是很完整,后面有机会再补充。现将代码里面的大概内容叙述一下:
New(connectstr)方法是创建带参数的SQLDataBase的实例;
UpdateSQL(updatecmd)方法是执行updatecmd数据库语句,更新数据库;
ExecuteSQLToArray(CommandText)函数是通过Sqlreader来获取服务器数据库里面的值,返回的是二维字符串类型的数组;
ExecuteSQLToDataTable(SelectCommandText)函数通过SqlDataAdapter来获取服务器数据库里面的值,返回的是DataTable对象,方便后期的处理;
close()方法是释放资源,关闭数据库连接。
'********************************
' Function: 定义SQL数据库操作的类
' Author: 要点理想色彩
' Createtime: 2018/07/23
' Remark:
'*******************************
Imports System.Data.SqlClient
Public Class SQLDataBase
' 数据库连接字符串
Private cnstr As String = ""
' 数据库执行的SQL脚本
Private sqlstr As String = ""
' 数据库连接对象
Private cn As SqlConnection
' SQl执行语句命令
Private cmd As SqlCommand
''' <summary>
''' 创建SQlDataBase类的实例,并打开以《connectstr》为连接字符串的数据库
''' </summary>
''' <param name="connectstr">连接数据库的字符串;例如:Data Source=IPadress;Initial Catalog=DataBaseName;Integrated Security=false;User ID=用户名;Password=密码;</param>
''' <remarks></remarks>
Public Sub New(ByVal connectstr As String)
' 给数据库连接字符赋值
If connectstr.Length = 0 Then
MsgBox("connectstr为空,创建SQLDataBase失败")
Exit Sub
Else
cnstr = connectstr
End If
' 连接到数据库,并打开
Try
cn = New SqlConnection(cnstr)
cn.Open()
Catch ex As Exception
MsgBox("错误代码为:" & Err.Number & vbCrLf & "错误描述为: " & Err.Description)
Exit Sub
End Try
End Sub
''' <summary>
''' 执行SQL更新语句
''' </summary>
''' <param name="updatecmd"></param>
''' <remarks></remarks>
Public Sub UpdateSQL(ByVal updatecmd As String)
' 给数据库执行脚本sqlstr赋值
If updatecmd.Length = 0 Then
MsgBox("updatecmd为空,无法更新数据库")
Exit Sub
Else
sqlstr = updatecmd
End If
' 给命令对象赋值
cmd = New SqlCommand With {.CommandText = updatecmd, .Connection = cn}
' 定义执行SQL语句收影响的行数
Dim influnrows As Integer
Try
influnrows = cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("错误代码为:" & Err.Number & vbCrLf & "错误描述为: " & Err.Description)
Exit Sub
End Try
End Sub
''' <summary>
''' 通过Sqlreader来获取服务器数据库里面的值,返回的是二维字符串类型的数组
''' </summary>
''' <param name="CommandText">Transact-SQL语句</param>
''' <returns>返回的是二维字符串类型的数组</returns>
''' <remarks></remarks>
Public Function ExecuteSQLToArray(ByVal CommandText As String) As String(,)
' 定义函数的返回结果
Dim FunRet As String(,) = Nothing
' 定义数据库reader对象
Dim reader As SqlDataReader = Nothing
' 给数据库执行脚本sqlstr赋值
If CommandText.Length = 0 Then
MsgBox("updatecmd为空,无法更新数据库")
Return FunRet
Else
sqlstr = CommandText
End If
' 给命令对象赋值
cmd = New SqlCommand With {.CommandText = CommandText, .Connection = cn}
' 给reader对象赋值
reader = cmd.ExecuteReader()
'判断是否有结果
If reader.HasRows = False Then
Return FunRet
End If
'*********************
'remarks:因为reader是一条一条语句的读取, reader只能获取列数, 不能获取行数, 因此需要将总的记录除以列数皆可以获取行数
'*********************
' 定义函数返回数组的列数和行数
Dim lstReader As New List(Of String)
Dim intColumnCount As Integer
Dim intRowsCount As Integer
'将结果集存到listReader列表
intColumnCount = reader.FieldCount
While reader.Read()
For i = 0 To intColumnCount - 1
lstReader.Add(reader.GetValue(i).ToString) '//如果数据库里面是null,则返回的是空值
Next
End While
'获取结果集的行数
intRowsCount = lstReader.Count / intColumnCount
'将结果转化为二位数组
ReDim FunRet(intRowsCount - 1, intColumnCount - 1)
Dim index As Integer = 0
For j = 0 To UBound(FunRet, 1)
For i = 0 To UBound(FunRet, 2)
FunRet(j, i) = lstReader.Item(index)
index = index + 1
Next
Next
'将函数的结果返回
Return FunRet
End Function
''' <summary>
''' 通过SqlDataAdapter来获取服务器数据库里面的值,返回的是DataTable对象
''' </summary>
''' <param name="SelectCommandText">Transact-SQL语句</param>
''' <returns>返回的是二维字符串类型的数组</returns>
''' <remarks></remarks>
Public Function ExecuteSQLToDataTable(ByVal SelectCommandText As String) As DataTable
' 定义函数的返回结果
Dim FunRet As New DataTable
' 给数据库执行脚本sqlstr赋值
If SelectCommandText.Length = 0 Then
MsgBox("updatecmd为空,无法更新数据库")
Return FunRet
End If
'将结果填充到SqlDataAdapter中
Dim sda As SqlDataAdapter
sda = New SqlDataAdapter(SelectCommandText, cn)
sda.Fill(FunRet)
'返回函数的值
Return FunRet
End Function
''' <summary>
''' 释放资源,关闭数据库连接
''' </summary>
''' <remarks></remarks>
Public Sub close()
'关闭cmd对象
If IsNothing(cmd) = False Then
cmd = Nothing
End If
'断开和数据库的连接
If IsNothing(cn) = False Then
cn.Close()
End If
End Sub
End Class如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛