You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET WebForms从SQL Server取表名到下拉框并填充GridView问题

问题排查与修复方案

一、下拉框表名不可读的问题

你当前用con.GetSchema()获取的是数据库全部架构元数据,并非仅表名集合,所以row[2]取到的不是正确表名。正确做法是指定获取表的架构信息:

protected void Page_Load(object sender, EventArgs e)
{
    // 仅首次加载时绑定下拉框,避免回发重复添加表名
    if (!IsPostBack)
    {
        using (SqlConnection con = new SqlConnection("Data Source=SQLD1.ad.shared;Initial Catalog=TestDeployment;Persist Security Info=True;User ID=<UserId>"))
        {
            con.Open();
            // 过滤获取用户自定义表(排除系统表)
            DataTable schema = con.GetSchema("Tables", new[] { null, null, null, "BASE TABLE" });
            foreach (DataRow row in schema.Rows)
            {
                // 直接取TABLE_NAME字段,保证表名准确可读
                DropDownList2.Items.Add(row["TABLE_NAME"].ToString());
            }
        }
    }
}

务必给DropDownList设置AutoPostBack="True",否则选择表名不会触发回发事件;同时绑定逻辑要放在!IsPostBack判断内,避免重复添加数据。

二、GridView未显示的问题

你的代码存在3个关键错误:

  1. fillgridview仅设置数据源,未调用DataBind()触发渲染;
  2. 触发数据填充的事件绑定错误,应绑定到DropDownList的SelectedIndexChanged,而非GridView的同名事件;
  3. SQL语句缺少空格,会导致SELECT * FROMTableName这类语法错误。

修复后的代码:

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
    fillgridview();
}

public void fillgridview()
{
    using (SqlConnection con = new SqlConnection("Data Source=SQLD1.ad.shared;Initial Catalog=TestDeployment;Persist Security Info=True;User ID=<UserId>"))
    {
        con.Open();
        // 用QUOTENAME处理表名,避免特殊字符报错+防范SQL注入
        string sql = $"SELECT * FROM {QUOTENAME(@TableName)}";
        SqlDataAdapter da = new SqlDataAdapter(sql, con);
        da.SelectCommand.Parameters.AddWithValue("@TableName", DropDownList2.SelectedValue);
        
        DataTable dt = new DataTable();
        da.Fill(dt);

        GridView1.DataSource = dt;
        // 必须调用DataBind()才能渲染数据到GridView
        GridView1.DataBind();
    }
}

三、其他优化点

  • 资源释放:用using块包裹数据库连接、数据适配器等资源,确保自动释放,避免连接池耗尽;
  • 移除多余控件:你手动添加的SQL数据源会和代码逻辑冲突,建议删除页面上的SQL数据源控件,完全用代码控制数据绑定;
  • 错误捕获:可以添加try-catch块捕获数据库操作异常,方便排查问题。

内容的提问来源于stack exchange,提问作者Shubh kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:50