如何在数据网格视图中显示数据

Posted

技术标签:

【中文标题】如何在数据网格视图中显示数据【英文标题】:How can I display data in data grid view 【发布时间】:2022-01-08 06:03:56 【问题描述】:

我有一个组合框,可以在其中显示数据库中所有表的名称。现在我找不到通过在组合框中选择表名来在数据网格视图中显示表的所有内容的方法。目前我有 2 个表,我可以通过在组合框中选择它并在数据网格视图中显示它的值来进行选择。

我想要实现的是,通过在组合框中选择表名,我的数据网格视图将根据组合框中选择的表名显示表的值

这是我的代码:

private void samples_Load(object sender, EventArgs e)

    mysqlConnection con = new MySqlConnection(conn);
    try
    
        con.Open();
        MySqlCommand sqlCmd = new MySqlCommand();

        sqlCmd.Connection = con;
        sqlCmd.CommandType = CommandType.Text;

        sqlCmd.CommandText = "select table_name from information_schema.tables where table_schema = 'attenddb'";

        MySqlDataAdapter sqlDataAdap = new MySqlDataAdapter(sqlCmd);

        DataTable dtRecord = new DataTable();
        sqlDataAdap.Fill(dtRecord);
        comboBox1.DataSource = dtRecord;
        comboBox1.DisplayMember = "TABLE_NAME";
        con.Close();
    
    catch (Exception ex)
    
        MessageBox.Show(ex.Message);
    


private void button1_Click(object sender, EventArgs e)

    try
    
        string query2 = "select table_name from ['"+ comboBox1.Text + "']";
        MySqlConnection con2 = new MySqlConnection(conn);
        MySqlCommand com2 = new MySqlCommand(query2, con2);
        MySqlDataAdapter myadapt = new MySqlDataAdapter();
        myadapt.SelectCommand = com2;
        DataTable dtable = new DataTable();
        myadapt.Fill(dtable);
        dataGridView1.DataSource = dtable;
    
    catch
    
        MessageBox.Show("Error Loading data");
    

【问题讨论】:

您好 Forgamez,您的具体问题是什么? :) 添加这可能会更容易回答您的问题。 您可能还想阅读 SQL 注入:bobby-tables.com 我编辑了,抱歉没有解释???? 【参考方案1】:

以下是您的代码存在的一些问题:

    我们可以使用“select * from” + comboBox1.Text;从数据库中获取数据。 我们需要在访问数据库之前打开连接。

如果要在数据网格视图中显示数据,可以参考以下代码:

private void Form1_Load(object sender, EventArgs e)
    
        comboBox1.Items.Add("table_name1");
        comboBox1.Items.Add("table_name2");
    

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    
        string query2 = "select * from " + comboBox1.Text;
        MySqlConnection con2 = new MySqlConnection(conn);
        con2.Open();
        try
        
            MySqlCommand com2 = new MySqlCommand(query2, con2);
            MySqlDataAdapter myadapt = new MySqlDataAdapter();
            myadapt.SelectCommand = com2;
            DataTable dtable = new DataTable();
            myadapt.Fill(dtable);
            dataGridView1.DataSource = dtable;
        
        catch
        
            MessageBox.Show("Error Loading data");
        
        finally

        
            if (con2.State == ConnectionState.Open)

            
                con2.Close();
            
        
    

【讨论】:

string query2 = "select * from " + comboBox1.Text;引入 SQL 注入。使用 SQL 参数:string query2 = "select * from @tableName";然后写 cm2.Parameters.cmd.Parameters.AddWithValue("@tableName", comboBox1.Text)【参考方案2】:

不要使用方括号 [] 和单引号。

string query2 = "select columnname from " + comboBox1.Text+ "";

【讨论】:

附加一个空字符串似乎毫无意义。 为避免SQL注入,使用SQL参数:string query2 = "select * from @tableName";然后写 cm2.Parameters.cmd.Parameters.AddWithValue("@tableName", comboBox1.Text) – Jamal 11 小时前【参考方案3】:

您必须从所选表中选择所有带有* 的列。

string query2 = "select * from ["+ comboBox1.Text + "]";

或使用字符串插值:

string query2 = $"select * from [comboBox1.Text]";

此外,不要在表名周围使用单引号(您已经有了方括号),因为您想要直接使用名称而不是字符串文字。

【讨论】:

以上是关于如何在数据网格视图中显示数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在kotlin的片段内显示网格视图?

如何使用文本框在数据网格视图中搜索数据

如何在可缩放滚动视图中绘制可点击的网格对象,从远程 json 数据中获取数据?

刷新数据网格视图的问题

使用Umbraco 7.2网格视图,如何将网格视图插入模板?

无法在网格视图中显示存储中的 Json 数据(使用 Sencha 框架)