Visual Basic 使用注册的 ODBC 设置连接数据库

Visual Basic connect database with ODBC setting with register

我编写了连接到 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"

您可以从 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

谢谢您的回答

我试着编辑了它

    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

我突然想到,如果我 select comboboxu 中的一个数据库,那么它进入 ODBC 并向命令添加服务器和数据库名称

然后它在结果中写给我 Index is out of range, Index must be non-negative and must be smaller than the collection size.参数名称:index