c# 如何在 Sql 查询中将 Combobox.Value 用于 From 子句

c# how to use Combobox.Value for a From Clause in a Sql query

请你帮我解决一个非常奇怪的请求

我正在构建一个表单来表示数据网格视图中的 table。 当我 select 组合框中的不同值时,我想更改绑定到 datagridview 的数据。我将事件绑定到一个按钮。

当我 运行 代码时出现错误:

'System.Data.OleDb.OleDbException' 类型的未处理异常发生在 System.Data.dll 附加信息:查询中的语法错误。查询子句不完整。

我的代码如下

 private void Ok_button3_Click(object sender, EventArgs e)
   {
        OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = E:\database.accdb; Persist Security Info =False;");
        OleDbCommand cmd = new OleDbCommand("Select * From  @name ", con); 
        cmd.Parameters.AddWithValue("@name", comboBox1.SelectedValue);

        cmd.CommandType = CommandType.Text;
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataTable dt = new DataTable();            
        da.Fill(dt);
        dt.TableName = "Project";
        dataGridView1.DataSource = dt;

    }

如果您使用数据绑定项,则使用 comboBox1.SelectedValue。如果您使用未绑定模式,则使用 comboBox1.SelectedItem。

    private void Ok_button3_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = E:\database.accdb; Persist Security Info =False;");
        //OleDbCommand cmd = new OleDbCommand("Select * From  " + comboBox1.SelectedValue.ToString(), con);
        OleDbCommand cmd = new OleDbCommand("Select * From  " + comboBox1.SelectedItem.ToString(), con);
        cmd.CommandType = CommandType.Text;
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        dt.TableName = "Project";
        dataGridView1.DataSource = dt;

    }

但不建议这样。您可以使用存储过程。

您不能将 table 名称作为参数传递。您可以根据您在组合框中选择的值构建 sql。用此代码替换您的代码并检查。

private void Ok_button3_Click(object sender, EventArgs e)
{
    OleDbConnection con = new OleDbConnection(@"Provider =  Microsoft.ACE.OLEDB.12.0; Data Source = E:\database.accdb; Persist Security Info =False;");
    OleDbCommand cmd = new OleDbCommand(String.Concat("Select * From ",comboBox1.SelectedValue), con); 


    cmd.CommandType = CommandType.Text;
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    DataTable dt = new DataTable();            
    da.Fill(dt);
    dt.TableName = "Project";
    dataGridView1.DataSource = dt;

}

试试这个:

 private void Ok_button3_Click(object sender, EventArgs e)
   {
     OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = E:\database.accdb; Persist Security Info =False;");
     string tableName = comboBox1.SelectedValue;
     var builder = new SqlCommandBuilder();
     string escapedTableName = builder.QuoteIdentifier(tableName);
     OleDbCommand cmd = new OleDbCommand("Select * From " + escapedTableName , con);        
     cmd.CommandType = CommandType.Text;
     OleDbDataAdapter da = new OleDbDataAdapter(cmd);
     DataTable dt = new DataTable();            
     da.Fill(dt);
     dt.TableName = "Project";
     dataGridView1.DataSource = dt;
}

此代码将帮助您:

private void Ok_button3_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection(@"Provider =        Microsoft.ACE.OLEDB.12.0; Data Source = E:\database.accdb; Persist Security Info =False;");
OleDbCommand cmd = new OleDbCommand(String.Concat("Select * From ",comboBox1.Text), con); 


cmd.CommandType = CommandType.Text;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();            
da.Fill(dt);
dt.TableName = "Project";
dataGridView1.DataSource = dt;
}