【问题标题】:Visual Basic connect database with ODBC setting with registerVisual Basic 使用 ODBC 设置和寄存器连接数据库
【发布时间】:2020-02-19 11:00:32
【问题描述】:

我编写了连接到 ODBC 注册表的代码。 数据库名称被写入组合框。 从组合框中选择数据库后,我需要将我的 IP 地址和密码从 ODBC.ini 传输到连接字符串。 这是与 MYSQL 的连接。

谢谢

Private Sub DsnLookup()

    Dim dsnNames As New List(Of String)
    Dim reg As Microsoft.Win32.RegistryKey = Registry.CurrentUser.OpenSubKey("Software")

    If reg IsNot Nothing Then
        reg = reg.OpenSubKey("ODBC")
        If reg IsNot Nothing Then
            reg = reg.OpenSubKey("ODBC.INI")
            If reg IsNot Nothing Then
                For Each dsn As String In reg.GetSubKeyNames
                    dsnNames.Add(dsn)
                Next
            End If
        End If
    End If


    For Each Name As String In dsnNames
        ComboBox1.Items.Add(Name)
    Next Name


End Sub

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DsnLookup()
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connString As String = "Database='combobox data;Data Source='ip adres odbc;" _
    & "User Id=root;Password=' odbc PWD"

【问题讨论】:

  • 是否每次都连接到本地PC上的数据源?如果是这样,您可以使用主机名“localhost”而不是查找本地 IP 地址吗?
  • 不,IP 地址是远程计算机。Bud se připojím na místní databázi "localhost" nebo vyberu vzdálený počítač 。 Ip adresu mám napsanou v odbc a název jefirm_stanice2

标签: mysql database vb.net odbc registry


【解决方案1】:

您可以从 ODBC.INI 中获取服务器名称(或 IP)和数据库名称,但它不存储密码。在您的连接字符串中包含主密码(当然是安全的)或查看其他身份验证选项。

这是从注册表中获取数据库和服务器信息的方法。保持代码不变,但替换 Button1.Click 事件并添加一个附加函数:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    If ComboBox1.SelectedIndex >= 0 Then  'Make sure something from dropdown selected

        Dim connString As String = String.Format("Database='{0}';Data Source='{1}';User Id=root;", GetODBCValue(ComboBox1.SelectedItem, "Database"), GetODBCValue(ComboBox1.SelectedItem, "Server"))

    End If
End Sub

Private Function GetODBCValue(ByVal ODBCName As String, ByVal ValueName As String) As String

    Dim reg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software")
    reg = reg.OpenSubKey("ODBC")
    reg = reg.OpenSubKey("ODBC.INI")
    reg = reg.OpenSubKey(ODBCName)
    Return reg.GetValue(ValueName)

End Function

【讨论】:

  • 谢谢。我使用此代码 Dim connString As String = String.Format("Database='{0}';Data Source='{1}';PWD='{2}';User Id=root;", GetODBCValue(ComboBox1. SelectedItem, "Database"), GetODBCValue(ComboBox1.SelectedItem, "Server"),GetODBCValue(ComboBox1.SelectedItem, "PWD"));
  • 我没有存储 PWD,很高兴听到你的排序。如果此答案有帮助,请您将其标记为解决方案。
【解决方案2】:

谢谢你的回答

我试图编辑它

    Private Function GetODBCValu(ByVal ODBCName As String, ByVal ValueName As String) As String
        Dim dsnNames As New List(Of String)
        Dim reg As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software")
        reg = reg.OpenSubKey("ODBC")
        reg = reg.OpenSubKey("ODBC.INI")
        reg = reg.OpenSubKey(ODBCName)
        Return reg.GetValue(ValueName)

        For Each dsn As String In reg.GetSubKeyNames
            dsnNames.Add(dsn)
        Next
        For Each Name As String In dsnNames
            ComboBox1.Items.Add(Name)
        Next Name

    End Function
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

 Dim connString As String = String.Format("Database='{0}';Data Source='{1}';User Id=root;", GetODBCValu(ComboBox1.SelectedItem, "Database"), GetODBCValu(ComboBox1.SelectedItem, "Server"))
        Dim conn As New MySqlConnection(connString)
        Dim cmd As New MySqlCommand()

试试 调用 conecDB() dt = 新数据表 's_table
Dim con 作为新的 SqlConnection

        DateTimePicker1.CustomFormat = "yyyy-MM-dd"
        DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker2.CustomFormat = "yyyy-MM-dd"
        DateTimePicker2.Format = DateTimePickerFormat.Custom
        conn.Open()
        cmd.Connection = conn       
 da = New MySql.Data.MySqlClient.MySqlDataAdapter("select --- ", connDB)


        comBuilderDB = New MySql.Data.MySqlClient.MySqlCommandBuilder(da)
        da.Fill(dt)
        dbvypis.DataSource = dt



        conn.Close()
        MessageBox.Show("COMPLET")

    Catch ex As MySqlException
        Console.WriteLine("Error: " & ex.ToString())
    End Try

    Try
        'declaring variable as integer to store the value of the total rows in the datagridview

        Dim max As Integer = dbvypis.Rows.Count - 1
        Dim total As String = "TOTAL ----->"
        Dim TOTALCOST As Integer = 0
        'getting the values of a specific rows


        For Each row As DataGridViewRow In dbvypis.Rows
            'formula for adding the values in the rows
            TOTALCOST += row.Cells(1).Value
        Next
        dbvypis.Rows(max).Cells(1).Value += TOTALCOST
        dbvypis.Rows(max).Cells(0).Value = total

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

我突然想到,如果我在组合框中选择一个数据库,那么它会进入 ODBC 和 connString 到命令添加服务器和数据库名称

然后它在结果中写给我 Index is out of range, Index 必须是非负数并且必须小于集合大小。参数名称:索引

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2015-01-15
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多