Преобразование функции VBA в VB.net для получения данных SQL - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь преобразовать код VBA в VB.net, и я сделал это до некоторой степени, но я не могу преобразовать набор результатов в vb.net. RS был 'тусклым как набор результатов' в VBA, думал, что я мог бы просто изменить его на набор данных, но получаю ошибки с '.fields' и другими опциями?

 Function GetG(sDB As String, sServ As String, sJob As String) As String

        'sDB = Database name, sServ = Server\Instance, path = job.path
        Dim conString As String = ("driver={SQL Server};server = " & 
         TextBox1.Text & " ; uid = username;pwd=password:database = " & 
         TextBox2.Text)
        Dim RS As DataSet
        Dim conn As SqlConnection = New SqlConnection(conString)
        Dim cmd As SqlCommand


        conn.Open()

'This is where my problems are occuring

        cmd = New SqlCommand("SELECT [ID],[Name] FROM dbo.PropertyTypes")

           Do While Not RS.Tables(0).Rows.Count = 0
            If RS.Fields(1).Value = sJob Then
                GetG = RS.Fields(0).Value
                GetG = Mid(GetG, 2, 36)
                Exit Do
            End If
            DataSet.MoveNext

        Loop
        conn.Close
    End Function

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Основываясь на моем понимании и некоторых догадках, вот то, что я придумал для того, что, я думаю, вы хотите.

Как я уже говорил в моем комментарии выше, похоже, что вы можете просто использовать предложение WHERE, чтобы получить именно ту запись, которую вы хотите (при условии, что в столбце имени появится один экземпляр sJob).

Создайте строку подключения из входных аргументов, а не элементов управления в вашей форме. Именно поэтому вы допускаете передачу аргументов. Также обратите внимание, что существует объект SqlCommandBuilder, который может представлять интерес. Но пока

Function GetG(sDB As String, sServ As String, sJob As String) As String
    'we'll pretend your connectionstring is correct based off of the sDB and sServ arguments
    Dim conStr As String = ("driver={SQL Server};server = " & sServ & " ; uid = username;pwd=password:database = " & sDB)
    'Create a connection and pass it your conStr
    Using con As New SqlConnection(conStr)
        con.Open() 'open the connection
        'create your sql statement and add the WHERE clause with a parameter for the input argument 'sJob'
        Dim sql As String = "SELECT [ID], [Name] FROM dbo.PropertyTypes WHERE [Name] = @job"
        'create the sqlCommand (cmd) and pass it your sql statement and connection
        Using cmd As New SqlCommand(sql, con)
            'add a parameter so the command knows what @job holds
            cmd.Parameters.Add(New SqlParameter("@job", SqlDbType.VarChar)).Value = sJob
            'Now that have the command built, we can pass it to a reader object 
            Using rdr As SqlDataReader = cmd.ExecuteReader
                rdr.Read()
                'i admin i'm a little confused here on what you are
                'trying to achieve so ID may not be what you are
                'really wanting to get a substring of.
                Return rdr("ID").ToString.Substring(2, 36)
            End Using
        End Using
    End Using
End Function

Примером проверки работоспособности может служить вызов окна сообщения, отображающего результат. В этом примере я буду притворяться, что TextBox3 содержит нужный вам sJob. С этим знанием вы можете просто сделать:

MessageBox.Show(GetG(TextBox2.Text, TextBox1.Text, TextBox3.Text))

Это должно привести к результату в окне сообщения.

0 голосов
/ 03 апреля 2019

Кажется, вы не заполняете свой DataSet. Поэтому, когда вы пытаетесь пройти через него, он неинициализирован или пуст.

Проверьте этот ответ, чтобы увидеть пример: Получить набор данных из базы данных

...