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