数据访问接口有三种:
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
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛