数据访问接口有三种:
1、ActiveX数据对象(ADO)
2、远程数据对象(RDO)
3、数据访问对象(DAO)
1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server
1)使用ADO控件连接
使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语句的字符串,用于指定建立与数据源连接的信息,语法如下:
</>code
- Provider=Drive;Password=UserPassword;PersistSecurity Info=False;User ID=UserName;Initial Catalog=Data Name;DataSource=ServerName
例:使用ADO控件连接名为student的数据库
</>code
- 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的数据库
</>code
- 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时的字符串格式设置:
</>code
- ODBC;DataBase=DataName;UID=UserName;PWD-UserPassword;DSN=DataSourceName
例:用Data控件通过ODBC中的studentinfo数据源连接名为student的数据库
</>code
- 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数据库连接类
</>code
- 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()方法是释放资源,关闭数据库连接。
</>code
- '********************************
- ' 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
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛