Come faccio a eseguire un’Istruzione Select in C# da un database di Access con una variabile?

Sto cercando di creare un’applicazione Windows Form in C#, per lo più solo di mettere in pratica ciò che ho imparato in università. Il mio database è un database di Access, composto di tre tabelle (SetIndex, SetSong [una tabella di collegamento], e la Canzone). Non abbiamo mai imparato a utilizzare un database in un’applicazione, e proprio in un sito web. La maggior parte di ciò che ho imparato, l’ho imparato attraverso tentativi ed errori.

Ho una combobox elenco con date dal SetIndex tabella, il valore e l’ID (chiave primaria di SetIndex). Ho bisogno di essere in grado di interrogare il database con un’istruzione select che dice setindex.id = setsong.setid e setsong.songid = canzone.id e setIndex.id = una variabile, il valore scelto dall’elenco a discesa. Ho scritto un’istruzione select in Access che utilizza (setindex.id = ?) che funziona bene in Access, ma non ho capito come farlo in C#. Ho trovato le risposte su come utilizzare i parametri e come eseguire una query su più tabelle, ma niente di che unisce i due.

Così c’è un modo per farlo all’interno del codice?

Questa è l’ultima cosa che ho provato:

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 è una variabile int che proviene da una classe globale che prende il valore di ID dalla casella combinata con l’elenco delle date (il valore del parametro selezionato SetIndex.ID). Ho testato per assicurarsi che questa parte di lavoro utilizzando un’etichetta e un pulsante e sembra di essere in recupero il valore, la conservazione in GlobalClass.ViewBySetDate, e la conversione di mio ID int bene.

Ma questo è venuto fuori con l’errore “Nessun valore specificato per uno o più parametri richiesti.”

C’è un migliore lavoro modo per fare questo? O, se no, come faccio a correggere l’errore?

Grazie in anticipo,

Mandy

Edit: ho cambiato l’istruzione Select seguente:

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’errore non c’è più, ma il datagridview è ancora vuoto.

 

2 Replies
  1. 2

    Test si esegue una query nel database.. il metodo è lo stesso per accedere al database, ma la query è sbagliata

    SELECT Title FROM Song WHERE Song.ID = SetSong.SongID AND SetIndex.ID=SetSong.SetID AND SetIndex.ID=@ID

    SetSong non è definito all’interno della query.

    • Grazie, risolto il problema di errore. Questa è l’istruzione SQL come ha funzionato in Access e come ora guarda nel mio codice: 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) =[?])); non ricevo un errore, ma il datagridview è ancora completamente vuoto.
    • Non che la query restituisce alcuna riga?
    • In Access.
    • Non devi aggiornare dopo l’impostazione dell’origine dati. fammi controllare su che..
  2. 0
    grigview1.datasource = table;
    
    gridview1.databind();
    • È meglio spiegare in che modo queste due righe di codice risolvere il POR;s problema.

Lascia un commento