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

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

文章来源:365jz.com     点击数:4005    更新时间: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语句的字符串,用于指定建立与数据源连接的信息,语法如下:

</>code

  1. Provider=Drive;Password=UserPassword;PersistSecurity Info=False;User ID=UserName;Initial Catalog=Data Name;DataSource=ServerName

例:使用ADO控件连接名为student的数据库

</>code

  1. Private Sub Form_Load() 
  2. Adodc1.connectionstring="Provider=SQLOLEDB.1;Password=;PersistSecurity Info=False;User ID=sa;Initial Catalog=student;Data Source=." 
  3. End Sub


2)使用ADO对象连接
ADO的数据库访问技术,不仅可以通过VB提供的控件实现,还可以通过ADO相关的对象实现。ADO对象包括了command对象、connection对象、recordset对象、Error对象、field对象、parameter对象、property对象,其中,connection对象是用来管理与数据库的连接的

例:使用connection对象的Open方法连接名为student的数据库

</>code

  1. Dim cnn as ADODB.Connection 
  2. Privatesub Form_Load() 
  3. set cnn=New ADODB.Connection 
  4. Cnn.open="provider=SQLOLEDB;password=;PersistSecurity Info=true;User ID=sa;Initial Catalog=student;Data Source=." 
  5. 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

  1. ODBC;DataBase=DataName;UID=UserName;PWD-UserPassword;DSN=DataSourceName


例:用Data控件通过ODBC中的studentinfo数据源连接名为student的数据库

</>code

  1. PrivateSub Form_Load() 
  2. Data1.connect="ODBC;DataBase=student;UID=sa;PWD=123;DSN=studentinfo" 
  3. 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数据库连接类

</>code

  1. Imports Microsoft.VisualBasic
  2. Imports System.Data
  3. Imports System.Data.SqlClient
  4.  
  5. Public Class dataBase
  6.     Public cnStr As String
  7.     Private _conn As New SqlClient.SqlConnection
  8.     Private _cmd As New SqlClient.SqlCommand
  9.     Private _sql As String
  10.  
  11.     Public Function getConnectString() As String '返回连接数据库字符串
  12.         cnStr = System.Configuration.ConfigurationManager.AppSettings("cnstr")
  13.         Return cnStr
  14.     End Function
  15.  
  16.     Public Sub Open() '打开数据库连接
  17.         Dim connStr As String
  18.         connStr = getConnectString()
  19.         _conn = New SqlConnection(connStr)
  20.         _conn.Open()
  21.     End Sub
  22.  
  23.     Public Sub Close() '关闭数据库连接
  24.         _conn.Dispose()
  25.         _conn.Close()
  26.     End Sub
  27.  
  28.     Public Sub RunSql(ByVal sql As String) '执行SQL语句
  29.         Open()
  30.         Dim cmd As New SqlCommand(sql, _conn)
  31.         cmd.ExecuteNonQuery()
  32.         Close()
  33.     End Sub
  34.  
  35.     Public Function getDataSet(ByVal sql As String) As DataSet '返回Dataset
  36.         Open()
  37.         Dim rs As New SqlDataAdapter(sql, _conn)
  38.         Dim ds As New DataSet
  39.         rs.Fill(ds)
  40.         Return ds
  41.     End Function
  42.  
  43. End Class

 

操作实例:

将有基于VB.Net的数据库的操作整理如下,或许不是很完整,后面有机会再补充。现将代码里面的大概内容叙述一下:


New(connectstr)方法是创建带参数的SQLDataBase的实例;

UpdateSQL(updatecmd)方法是执行updatecmd数据库语句,更新数据库;

ExecuteSQLToArray(CommandText)函数是通过Sqlreader来获取服务器数据库里面的值,返回的是二维字符串类型的数组;

ExecuteSQLToDataTable(SelectCommandText)函数通过SqlDataAdapter来获取服务器数据库里面的值,返回的是DataTable对象,方便后期的处理;

close()方法是释放资源,关闭数据库连接。

</>code

  1. '********************************
  2. ' Function: 定义SQL数据库操作的类
  3. ' Author: 要点理想色彩
  4. ' Createtime: 2018/07/23
  5. ' Remark: 
  6. '*******************************
  7. Imports System.Data.SqlClient
  8. Public Class SQLDataBase
  9.     ' 数据库连接字符串
  10.     Private cnstr As String = ""
  11.     ' 数据库执行的SQL脚本
  12.     Private sqlstr As String = ""
  13.     ' 数据库连接对象
  14.     Private cn As SqlConnection
  15.     ' SQl执行语句命令
  16.     Private cmd As SqlCommand
  17.  
  18.     ''' <summary>
  19.     ''' 创建SQlDataBase类的实例,并打开以《connectstr》为连接字符串的数据库
  20.     ''' </summary>
  21.     ''' <param name="connectstr">连接数据库的字符串;例如:Data Source=IPadress;Initial Catalog=DataBaseName;Integrated Security=false;User ID=用户名;Password=密码;</param>
  22.     ''' <remarks></remarks>
  23.     Public Sub New(ByVal connectstr As String)
  24.         ' 给数据库连接字符赋值
  25.         If connectstr.Length = 0 Then
  26.             MsgBox("connectstr为空,创建SQLDataBase失败")
  27.             Exit Sub
  28.         Else
  29.             cnstr = connectstr
  30.         End If
  31.  
  32.         ' 连接到数据库,并打开
  33.         Try
  34.             cn = New SqlConnection(cnstr)
  35.             cn.Open()
  36.         Catch ex As Exception
  37.             MsgBox("错误代码为:" & Err.Number & vbCrLf & "错误描述为: " & Err.Description)
  38.             Exit Sub
  39.         End Try
  40.     End Sub
  41.  
  42.     ''' <summary>
  43.     ''' 执行SQL更新语句
  44.     ''' </summary>
  45.     ''' <param name="updatecmd"></param>
  46.     ''' <remarks></remarks>
  47.     Public Sub UpdateSQL(ByVal updatecmd As String)
  48.  
  49.         ' 给数据库执行脚本sqlstr赋值
  50.         If updatecmd.Length = 0 Then
  51.             MsgBox("updatecmd为空,无法更新数据库")
  52.             Exit Sub
  53.         Else
  54.             sqlstr = updatecmd
  55.         End If
  56.  
  57.         ' 给命令对象赋值
  58.         cmd = New SqlCommand With {.CommandText = updatecmd, .Connection = cn}
  59.  
  60.         ' 定义执行SQL语句收影响的行数
  61.         Dim influnrows As Integer
  62.         Try
  63.             influnrows = cmd.ExecuteNonQuery()
  64.         Catch ex As Exception
  65.             MsgBox("错误代码为:" & Err.Number & vbCrLf & "错误描述为: " & Err.Description)
  66.             Exit Sub
  67.         End Try
  68.     End Sub
  69.  
  70.     ''' <summary>
  71.     ''' 通过Sqlreader来获取服务器数据库里面的值,返回的是二维字符串类型的数组
  72.     ''' </summary>
  73.     ''' <param name="CommandText">Transact-SQL语句</param>
  74.     ''' <returns>返回的是二维字符串类型的数组</returns>
  75.     ''' <remarks></remarks>
  76.     Public Function ExecuteSQLToArray(ByVal CommandText As String) As String(,)
  77.  
  78.         ' 定义函数的返回结果
  79.         Dim FunRet As String(,) = Nothing
  80.         ' 定义数据库reader对象
  81.         Dim reader As SqlDataReader = Nothing
  82.  
  83.         ' 给数据库执行脚本sqlstr赋值
  84.         If CommandText.Length = 0 Then
  85.             MsgBox("updatecmd为空,无法更新数据库")
  86.             Return FunRet
  87.         Else
  88.             sqlstr = CommandText
  89.         End If
  90.  
  91.         ' 给命令对象赋值
  92.         cmd = New SqlCommand With {.CommandText = CommandText, .Connection = cn}
  93.         ' 给reader对象赋值
  94.         reader = cmd.ExecuteReader()
  95.  
  96.         '判断是否有结果
  97.         If reader.HasRows = False Then
  98.             Return FunRet
  99.         End If
  100.  
  101.  
  102.         '*********************
  103.         'remarks:因为reader是一条一条语句的读取, reader只能获取列数, 不能获取行数, 因此需要将总的记录除以列数皆可以获取行数
  104.         '*********************
  105.  
  106.         ' 定义函数返回数组的列数和行数
  107.         Dim lstReader As New List(Of String)
  108.         Dim intColumnCount As Integer
  109.         Dim intRowsCount As Integer
  110.  
  111.         '将结果集存到listReader列表
  112.         intColumnCount = reader.FieldCount
  113.         While reader.Read()
  114.             For i = 0 To intColumnCount - 1
  115.                 lstReader.Add(reader.GetValue(i).ToString) '//如果数据库里面是null,则返回的是空值
  116.             Next
  117.         End While
  118.  
  119.         '获取结果集的行数
  120.         intRowsCount = lstReader.Count / intColumnCount
  121.  
  122.         '将结果转化为二位数组
  123.         ReDim FunRet(intRowsCount - 1, intColumnCount - 1)
  124.         Dim index As Integer = 0
  125.         For j = 0 To UBound(FunRet, 1)
  126.             For i = 0 To UBound(FunRet, 2)
  127.                 FunRet(j, i) = lstReader.Item(index)
  128.                 index = index + 1
  129.             Next
  130.         Next
  131.  
  132.         '将函数的结果返回
  133.         Return FunRet
  134.     End Function
  135.  
  136.     ''' <summary>
  137.     ''' 通过SqlDataAdapter来获取服务器数据库里面的值,返回的是DataTable对象
  138.     ''' </summary>
  139.     ''' <param name="SelectCommandText">Transact-SQL语句</param>
  140.     ''' <returns>返回的是二维字符串类型的数组</returns>
  141.     ''' <remarks></remarks>
  142.     Public Function ExecuteSQLToDataTable(ByVal SelectCommandText As String) As DataTable
  143.  
  144.         ' 定义函数的返回结果
  145.         Dim FunRet As New DataTable
  146.  
  147.         ' 给数据库执行脚本sqlstr赋值
  148.         If SelectCommandText.Length = 0 Then
  149.             MsgBox("updatecmd为空,无法更新数据库")
  150.             Return FunRet
  151.         End If
  152.  
  153.         '将结果填充到SqlDataAdapter中
  154.         Dim sda As SqlDataAdapter
  155.         sda = New SqlDataAdapter(SelectCommandText, cn)
  156.         sda.Fill(FunRet)
  157.  
  158.         '返回函数的值
  159.         Return FunRet
  160.     End Function
  161.  
  162.     ''' <summary>
  163.     ''' 释放资源,关闭数据库连接
  164.     ''' </summary>
  165.     ''' <remarks></remarks>
  166.     Public Sub close()
  167.  
  168.         '关闭cmd对象
  169.         If IsNothing(cmd) = False Then
  170.             cmd = Nothing
  171.         End If
  172.  
  173.         '断开和数据库的连接
  174.         If IsNothing(cn) = False Then
  175.             cn.Close()
  176.         End If
  177.     End Sub
  178. End Class


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

发表评论 (4005人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号