私はC#でWindowsフォームアプリケーションを作成しようとしています。主に大学で学んだことを実践するためです。私のデータベースは、3つのテーブル(SetIndex、SetSong [ジャンクションテーブル]、およびSong)で構成されるAccessデータベースです。Webサイトだけで、アプリケーションでデータベースを使用する方法を学んだことはありません。私が学んだことのほとんどは、試行錯誤を通して学んだものです。
SetIndexテーブルの日付を含むコンボボックスリストがあります。値はID(SetIndexの主キー)です。setindex.id =setsong.setidおよびsetsong.songid=song.idおよびsetIndex.id=変数(ドロップダウンリストから選択された値)というselectステートメントを使用してデータベースにクエリを実行できる必要があります。Accessで(setindex.id =?)を使用してselectステートメントを記述しましたが、これはAccessで正常に機能しますが、C#でそれを行う方法がわかりません。パラメータの使用方法と複数のテーブルのクエリ方法に関する回答を見つけましたが、2つを組み合わせたものはありません。
それで、コード内でそれを行う方法はありますか?
これは私が試した最後のことです:
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 SetIndex.ID=@ID";
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は、日付を一覧表示するコンボボックスからID値(選択したSetIndex.IDの値)を取得するグローバルクラスから取得されるint変数です。ラベルとボタンを使用してこの部分が機能していることを確認するためにテストしました。値を取得してGlobalClass.ViewBySetDateに格納し、intIDに正常に変換しているようです。
しかし、これは「1つ以上の必須パラメーターに値が指定されていません」というエラーが発生します。
これを行うためのより良い/実用的な方法はありますか?または、そうでない場合は、どうすればエラーを修正できますか?
前もって感謝します、
マンディ
編集: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はまだ空白です。