如何在C#中使用变量在Access数据库中运行Select语句?
我试图在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仍是空白。在数据库中查询
测试。该方法是访问数据库一样,但是您的查询是错误的
SELECT Title FROM Song WHERE Song.ID = SetSong.SongID AND SetIndex.ID=SetSong.SetID AND [email protected]
SetSong并不在查询的定义。
grigview1.datasource = table;
gridview1.databind();
最好解释这两行代码如何解决OP的问题。 – ryadavilli 2013-02-27 11:36:11
谢谢你,是固定的误差问题。这是在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
该查询是否返回任何行? – gbianchi 2012-04-10 22:40:27
它在Access中。 – user1325194 2012-04-10 22:46:15