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

ASP.NET页面重复显示首个SQL Server建筑名称问题求助

问题解决:页面重复显示第一个建筑名称的修复方案

问题根源

  1. 重复显示的核心原因:你通过cmd.ExecuteScalar().ToString()仅获取了查询结果的第一行第一列值,并将其存入data变量后,循环中始终复用这个固定值,导致所有链接都显示第一个建筑名称。
  2. 额外资源问题:代码中创建了两个SqlConnection,第一个完全未使用且未关闭,会造成数据库连接资源浪费;同时未使用using语句管理资源,容易引发连接池泄漏。

修复方案

  1. 删除第一段无用的数据库连接代码(conBldng相关的所有代码);
  2. 用using语句包裹数据库连接、命令和数据阅读器,确保资源自动释放;
  3. 循环时从SqlDataReader中读取当前行的buildingName值,替代固定变量。

修正后的C#代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) // 仅首次加载执行,避免回发重复添加控件
    {
        // 统一连接字符串,加@避免转义问题
        string connectionString = @"Data Source=DESKTOP-PMQQD94\SQLEXPRESS;Initial Catalog=loginAMS;Integrated Security=True";
        
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            string query = "select buildingName from buildingData";
            using (SqlCommand cmd = new SqlCommand(query, conn))
            {
                conn.Open();
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        // 从当前行读取对应建筑名称
                        string buildingName = dr["buildingName"].ToString();
                        var link = new HtmlGenericControl("a") { InnerText = buildingName };
                        
                        link.Attributes.Add("class", "card");
                        link.Attributes.Add("href", "viewRooms.aspx");
                        
                        inputBuilding.Controls.Add(link);
                    }
                }
            }
        }
    }
}

ASP.NET代码无需修改

保持原有代码即可:

<div class="cards" id="inputBuilding" runat="server">
</div>

内容的提问来源于stack exchange,提问作者Zain Javed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:05:22