C# c如何在Sql查询中使用From子句的Combobox.Value

C# c如何在Sql查询中使用From子句的Combobox.Value,c#,select,datagridview,combobox,oledb,C#,Select,Datagridview,Combobox,Oledb,你能帮我处理一个很奇怪的请求吗 我正在构建一个表单来表示datagridview中的表。 当我在组合框中选择不同的值时,我想更改绑定到datagridview的数据。我将事件绑定到一个按钮上 我在运行代码时出错: System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常。其他信息:查询中出现语法错误。不完整的查询子句。 我的代码如下 private void Ok_button3_Click(object sender, Ev

你能帮我处理一个很奇怪的请求吗

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

我在运行代码时出错:

System.Data.dll中发生类型为“System.Data.OleDb.OLEDBEException”的未处理异常。其他信息:查询中出现语法错误。不完整的查询子句。 我的代码如下

 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;

    }

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

如果使用数据绑定项,则使用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;

    }

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

不能将表名作为参数传递。您可以根据组合框中的值选择构建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;

}

不能将表名作为参数传递。您可以根据组合框中的值选择构建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;");
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;
}

此代码将帮助您:

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;
}

将comboBox1.ValueMember更改为comboBox1.selectedvalue谢谢您的回复。我已经做了更改,但仍然遇到相同的错误您不能将表名用作SQL参数。无论如何,我可以从组合框中更改数据源?如果使用白名单,则没有风险。定义存储有效表名的数组或字典。使用combobox索引或值查找表名。将comboBox1.ValueMember更改为comboBox1.SelectedValue感谢您的回复。我已经做了更改,但仍然遇到相同的错误您不能将表名用作SQL参数。无论如何,我可以从组合框中更改数据源?如果使用白名单,则没有风险。定义存储有效表名的数组或字典。使用组合框索引或值来查找表名。非常感谢,这非常有帮助。我会努力让它做我想做的,但这让我走上了正确的轨道。会投票但没有代表:非常感谢,这帮了大忙。我会努力让它做我想做的,但这让我走上了正确的轨道。将投票,但没有代表: