Visual Basi c подключить базу данных с настройкой ODB C с регистром - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть код, написанный для подключения к реестру ODB C. Имя базы данных записывается в поле со списком. Мне нужно перенести мой IP-адрес и пароль из ODB C .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"

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

спасибо за ответ

Я пытался отредактировать его

    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 = New DataTable 's_table
Dim con As New 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

Мне пришло в голову, что, если я выберу базу данных в выпадающем списке, чтобы она попала в ODB C, а connString к команде добавит имя сервера и базы данных

Затем он пишет мне в Индекс результата находится вне диапазона, Индекс должен быть неотрицательным и должен быть меньше размера коллекции. Имя параметра: индекс

0 голосов
/ 20 февраля 2020

Имя сервера (или IP) и имя базы данных можно получить из ODB C .INI, но оно не хранит пароль. Либо включите мастер-пароль в строку подключения (конечно, надежно), либо посмотрите другие параметры аутентификации.

Это способ получения информации о базе данных и сервере из реестра. Сохраняя ваш код таким же, но заменив событие 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
...