组合框下拉列表从数据库中显示多个表

时间:2013-06-15 17:03:36

标签: c#

我正在尝试使用组合框下拉列表从数据库中显示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");  
    }

1 个答案:

答案 0 :(得分: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 attack