如何使用 vb.net 将数据获取到数据库(类、模块和表单)

2024-02-03

我希望标题足以理解我的问题,我已经安装了运行 ADO.NET 所需的东西,我的模块中已经有一个连接字符串,并且我的类中已经有一个数据查询,

Imports System.Data
Imports System.Data.OleDb
Module GlobalVariables
    Public sGlobalConnectionString As String
    Friend conString As String
    Public dr As OleDbDataReader

    Sub Main()
        Dim sGlobalConnectionString As New OleDb.OleDbConnection
        Dim sDataserver As String
        Dim sDatabaseName As String
        Dim sDatabaseConnection As String

        sDataserver = "localhost"
        sDatabaseName = "employee"
        sDatabaseConnection = "Driver={MariaDB ODBC 3.1 Driver}; SERVER=" & sDataserver & "; UID=root;PWD=******; Database=" & sDatabaseName & "; PORT=3307; OPTION=3"
        sGlobalConnectionString = New OleDb.OleDbConnection(conString)
    End Sub
End Module

这是我的课

Imports System.Data.OleDb

Public Class clsDataQuery
    Public Shared Sub Class_initialize()
        Dim con = New OleDb.OleDbConnection
        con.ConnectionString = sGlobalConnectionString
        con.Open()
    End Sub
    Public Shared Sub Class_Terminate()
        Dim con = New OleDb.OleDbConnection
        If Not con Is Nothing Then
            con.Close()
            con = Nothing
        End If
    End Sub

    Public Function GetRecordDataSet(ByVal sStoreProcName As String, ByVal sParameterList As String)
        Dim cmd As New OleDbCommand()
        Dim arrParameter, arrParamName
        Dim sParamName As String
        Dim sDataValue
        Dim lCtr As Long
        On Error GoTo errhandler

        cmd.Connection = New OleDb.OleDbConnection
        cmd.CommandTimeout = 1800

        cmd.CommandText = CommandType.Text
        If Not Trim(sParameterList) = "" Then
            arrParameter = Split(sParameterList, "|", , vbTextCompare)
            If UBound(arrParameter) >= 0 And IsArray(arrParameter) Then
                For lCtr = 0 To UBound(arrParameter)
                    arrParamName = Split(arrParameter(lCtr), "$", , vbTextCompare)
                    sParamName = arrParamName(0)
                    sDataValue = arrParamName(1)
                    cmd.Parameters.Item(sParamName) = sDataValue
                Next lCtr
            End If
        End If
        GetRecordDataSet = cmd.ExecuteReader
        cmd = Nothing
        Exit Function
errhandler:
        MessageBox.Show("Records Not Found!!!")
    End Function
End Class

如果单击此按钮,则 Textbox1.text 的值将在数据库中搜索是否存在,如果存在则继续进入另一种形式,如果不存在则会出现错误消息,我该怎么做?

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim username = txtbox_lastname.Text
        If username <> "" Then
            Try
                clsDataQuery.Class_initialize()

            Catch ex As Exception
                MessageBox.Show("No Record Found")
            End Try
        Else
            MessageBox.Show("No Record Found!!!")
        End If
    End Sub

如果这是 MariaDb,那么您想使用 MySql 的提供程序。不是 ODBC 也不是 OleDb。难怪你会遇到问题。与初学者常用的 Access 数据库相比,该数据库的可用信息并不多。

除了使用数据库对象的方法之外,不要在任何地方声明数据库对象。您可以在类级别为连接字符串声明一个 Private 变量。

尽管其中一个是模块级变量,另一个是局部变量,但这是非常令人困惑和不好的做法。为什么将连接对象称为字符串?

Public sGlobalConnectionString As String
Dim sGlobalConnectionString As New OleDb.OleDbConnection

顺便说一句,在一行中声明和初始化变量是可以的。

Dim sDataserver = "localhost"

您在 Sub Main 的第一行创建一个新连接,然后将其丢弃并在最后一行创建另一个新连接。由于 sDataServer 和 sDatabaseName 是硬编码的,为什么不直接将文字值直接放入连接字符串中。

毕竟你通过了conStr到连接的构造函数而不是sDatabaseConnection。你为什么要建造sDatabaseConnection(另一个用词不当,它不是一个连接,它是一个字符串),然后永远不要使用它。有conStr已设置在其他地方?

无论如何,扔掉整个模块。

继续你的DataQuery班级。首先,名称应以大写字母开头。

摆脱Class_initialize。除了使用连接的方法之外,我们不想创建或打开任何连接。你从不打电话Class_Terminate所以也把它扔掉。

The GetRecordDataSet方法...

vb.net 中的函数需要数据类型。将返回值分配给函数名称的旧 VB6 语法可以工作,但这不是 .net 方式。在vb.net中我们使用Return关键词。

您尚未初始化或指定数据类型arrParameter, arrParamName or sDataValue这违反了 Option Strict。 (你确实有 Option Strict On,不是吗?)

On Error GoTo errhandler是 VB6 的一个悲伤的遗留物。 .net 语言具有结构化错误处理Try...Catch...Finally...End Try.

cmd.Connection = New OleDb.OleDbConnection设置连接属性,但是这个新连接没有连接字符串。

cmd.CommandText = CommandType.Text现在这太愚蠢了。我认为你想要的是cmd.CommandType =CommandType.StoredProcedure

Using...End Using即使出现错误,块也会负责声明、关闭和处置数据库对象。你不想返回一个DataReader因为读者需要一个开放的连接。cmd.ExecuteReader返回一个DataReader。我用阅读器加载了一个DataTable并返回了DataTable.

看来您正在尝试开发工厂模式,但它对您来说太先进了。只需传递值并调用特定于您要搜索的内容的方法即可。你想要你的DataQuery代码独立于您的用户界面。这Button代码不关心数据来自哪里。它可以是数据库、文本文件或 Web 服务。同样的DataQuery代码不知道这些值来自哪里。它可以是 WinForms 应用程序、Web 应用程序或电话应用程序。

Public Class DataQuery

    Private Shared ConStr As String = "server=localhost;userid=root;database=employee"

    Public Shared Function SearchByLastName(ByVal LName As String) As DataTable
        Dim dt As New DataTable
        Using cn As New MySqlConnection(ConStr),
                cmd As New MySqlCommand("Select * From PutTableNameHere Where LastName = @LName", cn)
            cmd.Parameters.Add("@LName", MySqlDbType.VarChar).Value = LName
            cn.Open()
            Using reader = cmd.ExecuteReader
                dt.Load(reader)
            End Using
        End Using
        Return dt
    End Function
End Class

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim dt As DataTable = Nothing
    If txtbox_lastname.Text <> "" Then
        Try
            dt = DataQuery.SearchByLastName(txtbox_lastname.Text)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End If
    DataGridView1.DataSource = dt
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 vb.net 将数据获取到数据库(类、模块和表单) 的相关文章

  • 在VB.NET中获取文件修改日期

    我的文件夹中有许多文件 我需要获取最后修改日期 所以我用了 FDate IO File GetLastWriteTime FName 对于某些文件 它工作正常 但对于其他文件 我得到的日期为 1 1 1601 但是当我在 Windows 资
  • 命令式代码与声明式代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我试图理解命令式范例和声明式范例之间的区别 因为我必须对 Visual Basic 进行分类 NET 在不同的范式中 除了面向对象之外
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 如何在不使用 LINQ 的情况下按降序对 FileInfo 对象数组进行排序

    我必须降级我的代码才能在 NET 2 0 上工作 因为它不支持 LINQ 目前 该代码对数组进行排序FileInfo对象由他们FullName属性 使用 LINQ 如下所示 Dim files As FileInfo files files
  • 多个 Visual Studio 项目抱怨临时文件丢失,因此无法打开。错误代码 &H80070003

    我在终端服务器上运行 Visual Studio 2010 并且已经运行了一段时间 问题相对较少 今天早上 我启动了我的电脑 在英国的长周末期间 似乎出现了以下问题 我有很多项目 但不是我的所有项目 也不是给定解决方案中的所有项目 抱怨无法
  • VB SQL 语句未选择正确的行

    我试图使用 SELECT 语句在我的数据库中 选择 一个人 但它没有选择正确的人 我也不确定为什么 我正在使用访问数据库 数据库连接代码 Imports System Data OleDb Module Database Connectio
  • 将字符串转换为双精度 - VB

    VB中有没有一种有效的方法来检查字符串是否可以转换为双精度型 我目前正在尝试将字符串转换为双精度型 然后查看它是否引发异常 但这似乎减慢了我的申请速度 Try if number then format it current CDbl x
  • 如何使用 VB.NET 打开受密码保护的共享网络文件夹?

    我需要在网络上打开受密码保护的共享文件夹才能访问 Access 97 数据库 如何打开文件夹并输入密码 在这里找到http www mredkj com vbnet vbnetmapdrive html http www mredkj co
  • vb.net HtmlAgilityPack 在 div 之后插入字符串

    我试图在 div 末尾直接插入一些我自己的 html 这个 div 里面有其他 div Dim HtmlNode As HtmlNode HtmlNode CreateNode span class Those were the frien
  • 检查 DBNull 会引发 StrongTypingException

    我正在使用数据集从数据库中提取数据 一行中的一个字段是NULL 我知道这个 但是 以下 vb net 代码会抛出StrongTypingException 在数据集设计器中自动生成的 get SomeField 方法中 If Not IsD
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • 从字体到跨度(大小和颜色)和背面的正则表达式(VB.NET)

    我正在寻找一个正则表达式 可以将我的字体标签 仅具有大小和颜色属性 转换为具有相关内联CSS的span标签 如果有帮助的话 这将在 VB NET 中完成 我还需要一个正则表达式来实现相反的效果 下面详细说明的是我正在寻找的转换示例 font
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • 选项卡索引不适用于面板中的控件?

    我有一个 vb net Windows 窗体 其中包含大约 15 个组合框和 15 个文本框 以及其他几个控件 所有这些TextBoxes and ComboBoxes位于面板中 原因是我需要根据用户选择 输入的内容来调整控件的可见属性 因
  • VB.NET 中的 TextChanged 事件

    我有两个基本文本框 比方说 A 和 B 我希望在一个文本框中输入内容以清除另一个文本框中的任何输入 例如 在 A 中键入 123 现在在 B 中键入 456 B 应包含 456 A 应为空 但是 我在 B 中收到 56 而 A 为空 似乎
  • 如何在VB函数中添加可选参数/默认值参数?

    如何在 Visual Basic 中创建一个包含可选参数的方法 Use the Optional关键字并提供默认值 可选参数必须是最后定义的参数 以避免创建不明确的函数签名 Sub MyMethod ByVal Param1 As Stri
  • 通过名称访问表单的控件

    不确定这篇文章的标题是否准确 我试图通过在循环中 组合 它们的名称来访问 Windows 窗体控件及其属性 但我似乎找不到相关文档 使用VB net 基本上 假设我有以下内容 Dim myDt As New DataTable Dim ro
  • 如何检查主音量是否静音

    如何在 Windows 7 操作系统中检查主音量是否静音我有静音或取消静音的代码 IE Public Const APPCOMMAND VOLUME MUTE As Integer H80000 Public Const APPCOMMAN
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • vb.net - 多维数组列表

    我已经设法制作了一些单维数组列表 但我无法找出多维数组列表 这就是我想做的 我有一个包含 5 列的数据库 mdb 我希望每一行都位于数组列表中 在 PHP 中我通常会做的是 array field1 array field2 field3

随机推荐