Comment puis-je exécuter une Instruction Select en C# à partir d'une base de données Access avec une variable?
Je suis en train de créer une application Windows Form en C#, surtout juste pour la pratique de ce que j'ai appris à l'université. Ma base de données est une base de données Access, composé de trois tableaux (SetIndex, SetSong [une table de jonction], et de la Chanson). Nous n'avons jamais appris à utiliser une base de données dans une application, il suffit dans un site web. La plupart de ce que j'ai appris, j'ai appris par essais et erreurs.
J'ai un combobox liste avec les dates de la SetIndex tableau, la valeur de l'ID (clé primaire de SetIndex). J'ai besoin d'être en mesure d'interroger la base de données avec une instruction select qui dit setindex.id = setsong.setid et setsong.songid = chanson.id et setIndex.id = une variable, la valeur choisie dans la liste déroulante. J'ai écrit une instruction select dans l'Accès à l'aide (setindex.id = ?) qui fonctionne très bien dans l'Accès, mais je n'ai pas compris comment le faire en C#. J'ai trouvé des réponses sur la façon d'utiliser les paramètres et comment interroger plusieurs tables, mais rien qui combine les deux.
Donc, il y a un moyen de le faire dans le code?
C'est la dernière chose que j'ai essayé:
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 est une variable int qui vient d'une classe globale qui prend la valeur de l'ID de la boîte combo d'inscription, les dates (la valeur de la sélection SetIndex.ID). J'ai testé pour vous assurer que cette partie a été de travailler à l'aide d'un label et d'un bouton et il semble être de la récupération de la valeur, de le stocker dans GlobalClass.ViewBySetDate, et de le convertir à mon int ID de l'amende juste.
Mais ce qui est à venir avec le message d'erreur "Pas de valeur donnée pour un ou plusieurs paramètres obligatoires."
Est-il un meilleur travail, façon de le faire? Ou, si non, comment puis-je corriger l'erreur?
Je vous remercie à l'avance,
Mandy
Edit: j'ai changé le Sélectionner l'énoncé suivant:
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) =[?]);
L'erreur n'est plus, mais le datagridview est encore vierge.
Vous devez vous connecter pour publier un commentaire.
Test de la requête dans la base de données.. la méthode est la même pour accéder à la base de données, mais votre question est mal
SetSong n'est pas définie à l'intérieur de la requête.
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 ((set song.setid)=setindex.id) And ((set index.id) =[?]));
, je ne suis pas une erreur, mais le datagridview est encore complètement dans le vide.