Consulta parametrizada 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]; } 

Estoy tratando de usar consultas parametrizadas para vincular el archivo de acceso en la vista de cuadrícula de datos. Encuentra los nombres de las columnas bien, pero los contenidos están vacíos.

¿Cómo puedo solucionar este problema?

En mi progtwig de prueba, la tabla de datos ds.Tables [0] .Rows.Count en realidad tenía una fila devuelta (ya que había una fila en mi base de datos de prueba que coincidía con la consulta). Si pone un descanso en esta línea, debería poder ver si los datos entran o no en la tabla de datos en primer lugar. Prueba esto:

 dataGridView1.DataSource = ds.Tables[0]; 

¿Cómo se ve el enlace frontal de dataGridView1? Ejecutar la consulta en Access podría arrojar algo de luz sobre la situación también.

Aquí hay un ejemplo de cómo las consultas parametrizadas funcionan 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"); } 

Esto funcionará con cualquier statement sql, debe asignar el signo de interrogación “?” para cada parámetro, y luego a continuación, debe crear los parámetros y agregarlos en el orden de cómo distribuyó los signos de interrogación para obtener los datos correctos en el campo correcto.

Pruebe sin especificar el tamaño de la columna en los parámetros:

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