Aby wysyłać zapytania do danych w wielu tabelach, dołącz do tabel
. Nie jestem w 100% jasny co do relacji między twoimi dwoma stołami, ale jeśli MedicalRecordID
jest poprawną relacją, zapytanie powinno wyglądać mniej więcej tak:
SELECT
CONVERT(char(80), i.InvDate,3) AS InvDate,
i.InvoiceNo,
i.EmployerCode,
i.TaxAmount + i.SubTotal AS Amount,
'' AS Payment,
pd.LastName,
pd.GivenName
FROM
dbo.Invoice i
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID)
;
Działa to, jeśli istnieje relacja jeden do jednego między tabelami i jeśli zawsze istnieje PatientDetails
rekord dla każdej faktury. Jeśli PatientDetails
jest opcjonalne, użyj LEFT JOIN
zamiast INNER JOIN
.
EDYTUJ (odpowiedź na komentarz):
Założę się, że konwersja DateTime w klauzuli WHERE nie działa tak, jak oczekujesz. Zakładając, że dtpFrom
i dtpTo
są DatePicker
kontroli, prawdopodobnie chcesz użyć SelectedDate
właściwość zamiast Text
. Ponadto zdecydowanie zalecałbym używanie parametrów w zapytaniach, a nie łączenie ciągów. Twój kod będzie czystszy i unikniesz wstrzyknięcia SQL
. Oto krótki przykład:
using (SqlConnection connection = new SqlConnection( ... ))
{
connection.Open();
string sql = @"
SELECT
CONVERT(char(80), i.InvDate,3) AS InvDate,
i.InvoiceNo,
i.EmployerCode,
i.TaxAmount + i.SubTotal AS Amount,
'' AS Payment,
pd.GivenName
FROM
dbo.Invoice i
LEFT JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID)
WHERE
InvDate >= @fromDate AND InvDate <= @toDate";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("@fromDate", dtpFrom.SelectedDate);
cmd.Parameters.AddWithValue("@toDate", dtpTo.SelectedDate);
using (SqlDataReader reader = cmd.ExecuteReader())
{
// do stuff with results
}
}