0

我正在尝试获取一个组合框下拉列表以从数据库中显示 datagridview 中的表,但我不知道该怎么做,我可以看到示例和说明如何仅显示一个表。

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection ();
        conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.4.0;Data     Source=|DataDirectory|\\Manager.accdb;Persist Security Info=True";
        OleDbCommand cmd = new OleDbCommand ("SELECT  Emplyee, Tasks, Projects from Manager");

        OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapter.Fill(dt, "Manager");  
    }
4

1 回答 1

0

没有名为的提供者 "Provider=Microsoft.ACE.OLEDB.4.0;",也许您想使用"Microsoft.ACE.OLEDB.12.0;"

然后,如果你想从组合框中选择的表名中读取所有数据,那么你的代码应该是这样的

string conString = "Provider=Microsoft.ACE.OLEDB.12.0;" + 
                   "Data Source=|DataDirectory|\\Manager.accdb;" + 
                   "Persist Security Info=False";
string tableName = comboBox1.SelectedItem.ToString();
using(OleDbConnection conn = new OleDbConnection (conString))
using(OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + tableName + "]", conn))
{
    con.Open();
    using(OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
    {
        DataSet ds = new DataSet();
        adapter.Fill(ds, tableName);  
        dataGridView.DataSource = ds.Tables[0];
    }
}

请注意插入组合框中的表名。通过字符串连接构建 sql 命令文本,您会遇到非常危险的情况。不要让用户插入这些名称,而是自己选择它们。如果您有恶意用户,它可能会发起 Sql Injection 攻击

于 2013-06-15T17:09:22.977 回答