您现在的位置: 365建站网 > 365学习 > vb/vb.net连接sql数据库实例代码

vb/vb.net连接sql数据库实例代码

文章来源:365jz.com     点击数:208    更新时间:2019-06-15 23:44   参与评论

数据访问接口有三种:

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


vb.net使用SQLite轻量级数据库

  1. 确保下载的SQLite动态链接库与您使用的平台相匹配,对于VB.net必须使用.NET Framework,这里选.NET Framework 2.0版本。SQLite动态链接库下载地址见本文后的注意事项。

    vb.net使用SQLite轻量级数据库

  2. Visual Studio中新建VB.net Windows窗体应用程序。

    vb.net使用SQLite轻量级数据库

  3. 将下载的SQLite动态链接库文件拷贝到VB.net目标应用程序目录下,注意只需要System.Data.SQLite.dll和SQLite.Interop.dll这2个文件即可。

    vb.net使用SQLite轻量级数据库

    vb.net使用SQLite轻量级数据库

  4. VB.net工程下,添加对System.Data.SQLite的引用,并导入System.Data.SQLite导入到命名空间。

    vb.net使用SQLite轻量级数据库

    vb.net使用SQLite轻量级数据库

  5. 设计前面板。这里作为示例,添加了1个标签用于显示数据库查询的内容,1个建表按钮、1个插记录按钮、1个改记录按钮、1个查记录按钮分别进行部分数据库操作。

    vb.net使用SQLite轻量级数据库

  6. 编辑后面板。注意必须在全局声明中导入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

    vb.net使用SQLite轻量级数据库

  7. 建立数据库连接后,可以进行数据库操作,基本的套路就是写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

    vb.net使用SQLite轻量级数据库

  8. 为了方便调试,建议使用SQLite Studio管理工具随时查看数据库操作的过程。

    vb.net使用SQLite轻量级数据库

    vb.net使用SQLite轻量级数据库


用于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


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (208人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------