2015-02-11 83 views
0

我試圖從兩個單獨的表中顯示數據到數據網格視圖,我知道它可能不是爲此目的而設計的,但我確信有一種方法停止它產生多個重複的行,如下所示;c#刪除數據網格視圖中的重複行

enter image description here

這裏是獲取數據(我不打算包括過濾器或以後在代碼,這是今天的日評論特定的搜索查詢)的代碼;

private void FillPatients() 
{ 
    SqlConnection connection = new SqlConnection(); 

    //DateTime timeNow = DateTime.Now; 
    //string format = "MMM ddd d HH:mm yyyy"; 

    try 
    { 
     connection.ConnectionString = connectionPath; 
     connection.Open(); 

     SqlCommand cmd = new SqlCommand("SELECT BookingId, Date, PatientId, Firstname, Surname FROM Bookings, Patients", connection); 
     //cmd.Parameters.AddWithValue("@Date", timeNow.ToString(format)); 
     SqlDataAdapter dap = new SqlDataAdapter(cmd); 
     DataTable dt = new DataTable(); 
     dap.Fill(dt); 

     BindingSource bs = new BindingSource(); 
     bs.DataSource = dt; 
     dgv.DataSource = bs; 
     dap.Update(dt); 

     DialogResult dlgResult; 
     dlgResult = MessageBox.Show(
       "Patients loaded", 
       "Patients", 
       MessageBoxButtons.OK, 
       MessageBoxIcon.Information, 
       MessageBoxDefaultButton.Button1); 

    } 
    catch (SqlException sql) 
    { 
     MessageBox.Show(sql.Message); 
    } 
    finally 
    { 
     connection.Close(); 
     connection.Dispose(); 
    } 
} 
+2

爲什麼不改變你的查詢選擇'DISTINCT'其中是你正在從中選擇的第二個表..?如果這是全部存儲在一個表中,那麼'Distinct'可以返回你需要的東西,例如:SqlCommand cmd = new SqlCommand(「SELECT Distinct BookingId,Date,PatientId,Firstname,Surname FROM Bookings,Patients」,connection);'你也可以做一個子選擇或使用Where子句..很多選項在這裏 – MethodMan 2015-02-11 19:35:07

+1

似乎你的SQL不是你想要的。也許你正在'Bookings.PatientId'上尋找'INNER JOIN'到'Patients.PatientId'(假設你的模式支持這個)? – wgraham 2015-02-11 19:35:13

+0

「重複」行是什麼意思?如果正在比較所有值,我在截圖中看不到任何重複內容。 – 2015-02-11 19:36:01

回答

0

(從評論轉換)

什麼查詢目前生產是cross join。從本質上講,這意味着您將從Bookings中得到每行Patients的每一行。

你可能想要的是一個inner join。內部聯接允許您爲從「右側」表(在本例中爲Patients)加入的記錄指定謂詞,因此對於每個Booking,您都可以根據外鍵獲取與其關聯的Patient

注意:您可以通過WHERE子句通過交叉連接完成相同的結果,但它已被棄用,並且根據RDBMS,您可能會看到不同的性能。

-1

我會客串,你需要改變你的SQL語句:

SELECT BookingId, Date, PatientId, Firstname, Surname 
FROM Bookings 
INNER JOIN Patients ON Patients.PatientId = Bookings.PatientId; 
+0

Wgraham有想法和R.shilling你給了我簡單的答案,無論你是否感謝你的幫助 – 10AlexD10 2015-02-11 20:04:19