VB.NET Выполнить циклический запрос и отобразить его результат в 1 представлении данных - PullRequest
0 голосов
/ 17 октября 2019

У меня есть лист Excel, загруженный в dt_data, и я хочу сравнить значения dt_data с моей базой данных и отобразить его в другом сетевом представлении, которое dt_sample. Внутри моей базы данных есть записи за последние 3 месяца, и я хочу, чтобы все они отображались, вот мой код ниже:

Try

            For i As Integer = 0 To dt_data.RowCount - 3
                Dim meter_number As String
                meter_number = dt_data.Rows(i).Cells(3).Value
                Dim query As String = "Select * from customer where meter_num = @meter_num"
                conn.Open()
                Dim command As New SqlCommand(query, conn)
                command.Parameters.AddWithValue("@meter_num", meter_number)
                Dim da As New SqlDataAdapter(command)
                Dim ds As New DataSet


                If i = dt_data.RowCount - 3 Then
                    da.Fill(ds, "customer")
                    dt_sample.DataSource = ds.Tables(0)
                End If



                conn.Close()

            Next
        Catch ex As SqlException
            MsgBox(ex.Message, MsgBoxStyle.Critical, "SQL Error")
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "General Error")
            'End Try
            'Catch ex As Exception
            'MessageBox.Show(String.Format("Error: {0}", ex.Message), "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)
        End Try

https://i.imgur.com/23WVp8z.png

1 Ответ

0 голосов
/ 28 октября 2019
Using command As New SqlCommand()
                command.Connection = conn

                Dim parameterNames As New List(Of String)(dt_data.RowCount - 2)
                For i As Integer = 0 To dt_data.RowCount - 3
                    Dim parameterName As String = "@meter_num_" & i
                    Dim meter_number As String = dt_data.Rows(i).Cells(3).Value
                    command.Parameters.AddWithValue(parameterName, meter_number)
                    parameterNames.Add(parameterName)
                Next

                command.CommandText = String.Format("SELECT * FROM customer WHERE cycle = @cycle and meter_num IN ({0})", String.Join(",", parameterNames), ("ORDER BY Client_Name ASC"))
                command.Parameters.AddWithValue("@cycle", cycle2last)

                Dim da As New SqlDataAdapter(command)
                Dim ds As New DataSet
                da.Fill(ds, "customer")
                Compare_Reading.dt_last2month.DataSource = ds.Tables(0)
            End Using

вот что я нашел решение, и оно успешно решило мои проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...