2012-04-10 71 views
1

我試圖在C#中創建一個Windows窗體應用程序,主要是爲了練習我在大學學到的東西。我的數據庫是一個Access數據庫,由三個表(SetIndex,SetSong [聯結表]和Song)組成。我們從來沒有學會如何在應用程序中使用數據庫,只是在網站上。我學到的大部分知識,都是通過反覆試驗來了解的。如何在C#中使用變量在Access數據庫中運行Select語句?

我有從SetIndex表日期的組合框列表,該值是所述ID(SetIndex的主鍵)。我需要能夠使用select語句來查詢數據庫,該語句說setindex.id = setsong.setid和setsong.songid = song.id和setIndex.id =變量,從下拉列表中選擇的值。我在Access中使用(setindex.id =?)在Access中編寫了一個select語句,在Access中工作得很好,但我還沒有想出如何在C#中完成它。我找到了有關如何使用參數以及如何查詢多個表的答案,但沒有結合這兩個表的答案。

那麼,有沒有辦法在代碼中做到這一點?

這是我想的最後一件事:

using (OleDbConnection dataConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Mandy\Documents\Visual Studio 2010\Projects\SetManager1.3\SetManager1.3\SetManager.accdb")) 
{ 
    using (OleDbCommand dataCommand = dataConnection.CreateCommand()) 
    { 
     dataCommand.CommandText = "SELECT Title FROM Song WHERE Song.ID = SetSong.SongID AND SetIndex.ID=SetSong.SetID AND [email protected]"; 
     dataConnection.Open(); 
     dataCommand.Parameters.AddWithValue("@ID", ID); 
     DataTable table = new DataTable(); 
     OleDbDataAdapter adapter = new OleDbDataAdapter(); 
     adapter.SelectCommand = dataCommand; 
     adapter.Fill(table); 
     bindingSource1.DataSource = table; 
     dataGridView1.AutoResizeColums(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); 
     dataGridView1.ReadOnly = true; 
     dataGridView1.DataSource = bindingSource1; 
    } 
} 

ID是來自於全球一流的,從組合框中列出的日期(所選SetIndex的值取的ID值int變量。 ID)。我測試了一下,通過使用標籤和按鈕來確保這部分工作正常,它似乎在檢索值,將其存儲在GlobalClass.ViewBySetDate中,並將其轉換爲我的int ID就好了。

但這是未來與錯誤「沒有爲一個或多個必需的參數給定值。」

有沒有更好的/工作方式做到這一點?或者,如果不是,我該如何解決這個錯誤?

謝謝你在前進,

曼迪

編輯:我改變了SELECT語句如下:

SELECT song.Title FROM SetIndex INNER JOIN (song INNER JOIN SetSong ON song.ID = SetSong.SongID) ON SetIndex.ID = SetSong.SetID WHERE ((set index.id) =[?]); 

的錯誤是沒有了,但在DataGridView仍是空白。在數據庫中查詢

回答

2

測試。該方法是訪問數據庫一樣,但是您的查詢是錯誤的

SELECT Title FROM Song WHERE Song.ID = SetSong.SongID AND SetIndex.ID=SetSong.SetID AND [email protected] 

SetSong並不在查詢的定義。

+0

謝謝你,是固定的誤差問題。這是在Access中使用的SQL語句,因爲它現在在我的代碼中顯示: 'SELECT song.Title FROM SetIndex INNER JOIN(song INNER JOIN SetSong ON song.ID = SetSong.SongID)ON SetIndex.ID = SetSong .SetID WHERE(((song.id)= setsong.songid)AND((設定song.setid)= setindex.id)AND((設定index.id)=)[]);' 我不出現錯誤,但datagridview仍然完全空白。 – user1325194 2012-04-10 22:26:59

+0

該查詢是否返回任何行? – gbianchi 2012-04-10 22:40:27

+0

它在Access中。 – user1325194 2012-04-10 22:46:15

0
grigview1.datasource = table; 

gridview1.databind(); 
+1

最好解釋這兩行代碼如何解決OP的問題。 – ryadavilli 2013-02-27 11:36:11

相關問題