OLEDB 参数化查询

l46*_*kok 1 .net c# oledb ms-access winforms

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];
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用参数化查询将访问文件绑定到 datagridview。它发现列名很好,但内容为空。

我该如何解决这个问题?

Hes*_*urg 5

下面是参数化查询如何与 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");
}
Run Code Online (Sandbox Code Playgroud)

这适用于任何 sql 语句,您必须指定问号“?” 到每个参数,然后在下面您必须创建参数并按照您布置问号的顺序添加它们,以便将正确的数据放入正确的字段中。