Давайте начнем менять ваш запрос на параметризованный. Ваш учитель сказал вам, что это не важно в вашем текущем контексте, но я категорически не согласен. Написание параметризованного запроса - это навык, который необходимо освоить как можно скорее. Часть из соображений безопасности, посмотрим, насколько ясно теперь без всех этих объединений.
Dim Query As String = "
SELECT SUM(importe) as ImporteHaberes
FROM personal_haberes
WHERE persona_doc = @doc AND mes = @mes AND año = @año;
SELECT SUM(importe) as ImporteDescuentos
FROM personal_descuentos
WHERE persona_doc = @doc AND mes = @mes AND año = @año;
SELECT (SELECT SUM(importe)
FROM personal_haberes
WHERE persona_doc = @doc AND mes = @mes AND año = @año) -
(SELECT SUM(importe)
FROM personal_descuentos
WHERE persona_doc = @doc AND mes = @mes AND año = @año) AS ImporteTotal"
Теперь создайте команду и добавьте три параметра
Опять посмотрите, насколько она более краткая и понятнаяи легко обнаружить проблему с Value.Month, повторяющимся также для окончательного параметра.
Dim cmd As New MySqlCommand(Query, cnn)
cmd.Parameters.Add("@doc", MySqlDbType.VarChar).Value = Module1.document
cmd.Parameters.Add("@mes", MySqlDbType.Int32).Value = HR_DatePicker.Value.Month
' ???? This should be HR_DatePicker.Value.Year ???? '
cmd.Parameters.Add("@año", MySqlDbType.Int32).Value = HR_DatePicker.Value.Month
rdr = cmd.ExecuteReader
А теперь использование NextResult. Просто запустите свой первый цикл, чтобы получить первый результат, затем перейдите ко второму результату и т. Д.
While rdr.Read()
Me.HR_txtHaberes.Text = rdr.Item("ImporteHaberes").ToString
End While
rdr.NextResult()
While rdr.Read()
Me.HR_txtDescuentos.Text = rdr.Item("ImporteDescuentos").ToString
End While
rdr.NextResult()
While rdr.Read()
Me.HR_txtTotal.Text = rdr.Item("ImporteTotal").ToString
End While
Учитывая тот факт, что вы возвращаете всегда одну запись для каждого запроса, вы также можете заменить whileпетля с простым
If rdr.Read() Then
Me.HR_txtHaberes.Text = rdr.Item("ImporteHaberes").ToString
End If
rdr.NextResult()
.....