Ошибка в запросе выбора с использованием SQL Сервер в VB. NET Winforms - PullRequest
0 голосов
/ 26 февраля 2020

Этот запрос не возвращает никакого значения и не вызывает ошибок:

Dim cmdAs1 As String
Dim daAs1 As SqlClient.SqlDataAdapter
Dim dsAs1 As DataSet
Dim dtAs1 As DataTable

cmdAs1 = "SELECT * FROM [SN_Male_Quest_2018].[dbo].[Section_3] WHERE sub_village_id= '" & sub_village_id & "' and household_id= '" & household_id & "' and hrid= '" & male & "' and hrid= '" & female & "' and hrid= '" & adolscent & "' and hrid= '" & respid & "'"
daAs1 = New SqlClient.SqlDataAdapter(cmdAs1, cnn)
dtAs1 = New DataTable()
dsAs1 = New DataSet()
daAs1.Fill(dsAs1, "Section_3")
dtAs1 = dsAs1.Tables("Section_3")
lbloperator.Text = dtAs1.Rows.Count

If (dtAs1.Rows.Count.Equals(0)) Then

1 Ответ

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

Держите ваш объект подключения локально по отношению к методу, в котором он используется. Это позволяет вам контролировать его закрытие и утилизацию. Using...End Using блокирует это для вас, даже если есть ошибка. В этом примере как соединение, так и команда включены в Using.

Как было отмечено в комментариях @devio, вы не можете иметь одно поле, равное нескольким различным значениям. Я могу только предположить, что вы имели в виду «ИЛИ».

Всегда используйте параметры. Я должен был угадать тип данных и размер поля. Пожалуйста, проверьте свою базу данных и измените код соответствующим образом.

Private Sub FillDataTable(sub_village_id As String, household_id As String, male As String, female As String, adolscent As String, respid As String)
    Dim dtAs1 As New DataTable
    Using cn As New SqlConnection("Your connection string"),
            cmd As New SqlCommand("SELECT * FROM [Section_3] WHERE sub_village_id= @villageID and household_id= @householdID and (hrid= @hrIDMale Or hrid= @hrIDFemale Or hrid= @hrIDAdolescent Or hrid= @hrIDResID);", cn)
        With cmd.Parameters
            .Add("@villageID", SqlDbType.VarChar, 100).Value = sub_village_id
            .Add("@householdID", SqlDbType.VarChar, 100).Value = household_id
            .Add("@hrIDMale", SqlDbType.VarChar, 100).Value = male
            .Add("@hrIDFemale", SqlDbType.VarChar, 100).Value = female
            .Add("@hrIDAdolescent", SqlDbType.VarChar, 100).Value = adolscent
            .Add("@hrIDResID", SqlDbType.VarChar, 100).Value = respid
        End With
        cn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    lbloperator.Text = dt.Rows.Count.ToString
    If dt.Rows.Count = 0 Then
        'Your code here
    End If
End Sub
...