Query con parametri OLEDB

public void LoadDB() { string FileName = @"c:\asdf.accdb"; string query = "SELECT ID, Field1 FROM Table1 WHERE ID=? AND Field1=?"; string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName; OleDbConnection odc = new OleDbConnection(strConn); dAdapter = new OleDbDataAdapter(); OleDbCommand cmd = new OleDbCommand(query,odc); cmd.Parameters.Add("?", OleDbType.Integer, 5).Value = 1234; cmd.Parameters.Add("?", OleDbType.BSTR, 5).Value ="asdf"; dAdapter.SelectCommand = cmd; ds = new DataSet(); dAdapter.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; } 

Sto cercando di utilizzare la query parametrizzata per colbind il file di accesso alla vista dati. Trova bene i nomi delle colonne, ma i contenuti sono vuoti.

Come posso risolvere questo problema?

Nel mio programma di test, il ds.Tables [0] .Rows.Count datatable aveva effettivamente restituito 1 riga (poiché nel database di test c’era una riga che corrispondeva alla query stessa). Se metti una pausa su questa linea dovresti essere in grado di vedere se i dati stanno entrando o meno nel datatable in primo luogo. Prova questo:

 dataGridView1.DataSource = ds.Tables[0]; 

Che aspetto ha l’associazione front-end di dataGridView1? L’esecuzione della query in Access potrebbe far luce sulla situazione.

Ecco un esempio di come le query con parametri funzionano con CSharp, OleDB.

 try { connw.Open(); OleDbCommand command; command = new OleDbCommand( "Update Deliveries " + "SET Deliveries.EmployeeID = ?, Deliveries.FIN = ?, Deliveries.TodaysOrders = ? , connw); command.Parameters.Add(new OleDbParameter("@EMPID", Convert.ToDecimal(empsplitIt[1]))); command.Parameters.Add(new OleDbParameter("@FIN", truckSplit[1].ToString())); command.Parameters.Add(new OleDbParameter("@TodaysOrder", "R")); catchReturnedRows = command.ExecuteNonQuery();//Commit connw.Close(); } catch (OleDbException exception) { MessageBox.Show(exception.Message, "OleDb Exception"); } 

Ciò funzionerà con qualsiasi istruzione sql, è necessario assegnare il punto interrogativo “?” a ciascun parametro, quindi in basso è necessario creare i parametri e aggiungerli nell’ordine in cui sono stati disposti i punti interrogativi per ottenere i dati corretti nel campo corretto.

Prova senza specificare la dimensione della colonna nei parametri:

 cmd.Parameters.Add("?", OleDbType.Integer).Value = 1234; cmd.Parameters.Add("?", OleDbType.BSTR).Value ="asdf";