【问题标题】:VB.NET connection to MySQL Add ModelVB.NET 连接到 MySQL 添加模型
【发布时间】:2019-07-17 17:36:20
【问题描述】:

我对 .NET 很陌生。我正在尝试使用第一个发布响应的人的代码示例,这里:Connect to remote MySQL database using VB.NET 2010

我想实例化 MySqlVB 模型对象,但是当我将以下代码添加到控制器中时,我得到一个未找到的错误。我不知道如何解决这个问题。

错误是:警告 1 在 Imports 'MySql.Data.MySqlClient' 中指定的命名空间或类型不包含任何公共成员或找不到。确保命名空间或类型已定义并包含至少一个公共成员。确保导入的元素名称不使用任何别名。

我需要运行 MySQL 查询并将数据集返回给控制器。有人可以告诉我怎么做吗?

我正在使用 VB 2010 Express 来执行此操作。

这是控制器

Public Class Form1
    Private Sub PrintBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintBtn.Click
        Dim data As New MySqlVB

        With data
            If .Connection Then
                MessageBox.Show("Database Conneted.")
            Else
                MessageBox.Show(.ErrorMessage)
            End If
        End With
    End Sub
End Class

这是我的模型对象

Imports MySql.Data.MySqlClient

Public Class MySqlVB
    Private _connection As New MySqlConnection
    Private _errormessge As String
    Private _servername As String = "xxx.xxx.xxx.xxx"
    Private _databasename As String = "testdb"
    Private _userid As String = "theuser"
    Private _password As String = "thepass"

    Public WriteOnly Property ServerName() As String
        Set(ByVal value As String)
            _servername = value
        End Set
    End Property

    Public WriteOnly Property DatabaseName() As String
        Set(ByVal value As String)
            _databasename = value
        End Set
    End Property

    Public WriteOnly Property UserID() As String
        Set(ByVal value As String)
            _userid = value
        End Set
    End Property

    Public WriteOnly Property Password() As String
        Set(ByVal value As String)
            _password = value
        End Set
    End Property

    Public ReadOnly Property ErrorMessage() As String
        Get
            Return _errormessge
        End Get
    End Property

    Public Function Connection() As Boolean
        Try
            _connection.ConnectionString = "Server=" & _servername & ";Port=3306;Database=" & _databasename & ";User ID=" & _userid & ";Password=" & _password & ""
            _connection.Open()
            If _connection.State = ConnectionState.Open Then
                _connection.Close()
                Return True
            End If
        Catch ex As Exception
            _errormessge = ex.Message
            Return False
        End Try
    End Function
End Class

【问题讨论】:

  • 最好找MySqlCommand和vb net这带来很多例子。但是对于您的问题,您有一个项目,您下载了 mysql 连接器并添加了 dll 作为参考。之后,您添加了一个新类 MySqlVB,并更改了变量 n 以适合您的 mysql 服务器,然后将您的代码放入您的表单中。这样可以正常工作,您的错误到底在哪里?
  • @nbk,谢谢。我会调查的。要回答你的问题,是的,我有一个项目,并且 MySQL 连接器(ODBC)已经安装在 VB 所在的机器上。我没有添加参考,我不确定是否需要。我也使用了控制器中的变量,但错误仍然存​​在。控制器文件正在生成错误。
  • I have not added a reference though and I'm not sure if I need to or not. 你需要。
  • 为什么选择 ODBC?为什么不是 MySql 原生提供者?
  • 您正在重新发明轮子来构建连接字符串。见dev.mysql.com/doc/dev/connector-net/6.10/html/…

标签: vb.net


【解决方案1】:

假设您已经修复了对 MySql.Data.MySqlClient 的引用,我认为您的课程可以使用一些工作。

Public Class DataAccess

    Private ConnectionString As String

    Public Sub New(UserName As String, Password As String)
        Dim builder As New MySqlConnectionStringBuilder With {
            .Server = "xxx.xxx.xxx.xxx",
            .Database = "testdb",
            .UserID = UserName,
            .Password = Password
        }
        ConnectionString = builder.ConnectionString
        Debug.Print(ConnectionString) 'just to see what the builder created
    End Sub

    Public Function TestConnecion() As Boolean
        Using cn As New MySqlConnection(ConnectionString)
            Try
                cn.Open()
            Catch ex As Exception
                Debug.Print(ex.Message) 'just to see what is wrong with connection
                Return False
            End Try
        End Using
        Return True
    End Function

    Public Function GetData() As DataTable
        Dim dt As New DataTable
        Using cn As New MySqlConnection(ConnectionString)
            Using cmd As New MySqlCommand("Select * From SomeTable")
                cn.Open()
                dt.Load(cmd.ExecuteReader)
            End Using
        End Using
        Return dt
    End Function

End Class

假设您有一个 DataGridView 来显示数据和 2 个用于用户 ID 和密码的文本框,您可以像这样在表单中使用您的类。

Private Sub FillGrid()
    Dim daClass As New DataAccess(txtUser.Text, txtPassword.Text)
    Dim dt = daClass.GetData
    DataGridView1.DataSource = dt
End Sub

当然,您需要添加错误处理。您还需要对密码进行加盐和哈希处理。永远不应存储纯文本密码。

【讨论】:

  • 谢谢玛丽。我对这种语言是全新的。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多