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];
}
我正在尝试使用参数化查询将访问文件绑定到datagridview。它找到列名称,但内容为空。
如何解决此问题?
答案 0 :(得分:4)
以下是参数化查询如何与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");
}
这适用于任何sql语句,你必须分配问号"?"对于每个参数,然后在下面,您必须创建参数并按照您布置问号的顺序添加它们,以便将正确的数据输入到正确的字段中。
答案 1 :(得分:2)
在我的测试程序中,ds.Tables [0] .Rows.Count数据表实际上返回了1行(因为我的测试数据库中有一行与查询本身匹配)。如果你在这一行上休息一下,你应该能够看到数据是否首先进入数据表。试试这个:
dataGridView1.DataSource = ds.Tables[0];
dataGridView1的前端绑定是什么样的?在Access中运行查询也可以了解情况。
答案 2 :(得分:0)
尝试不在参数中指定列大小:
cmd.Parameters.Add("?", OleDbType.Integer).Value = 1234;
cmd.Parameters.Add("?", OleDbType.BSTR).Value ="asdf";