ASP.NET页面重复显示首个SQL Server建筑名称问题求助
问题解决:页面重复显示第一个建筑名称的修复方案
问题根源
- 重复显示的核心原因:你通过
cmd.ExecuteScalar().ToString()仅获取了查询结果的第一行第一列值,并将其存入data变量后,循环中始终复用这个固定值,导致所有链接都显示第一个建筑名称。 - 额外资源问题:代码中创建了两个
SqlConnection,第一个完全未使用且未关闭,会造成数据库连接资源浪费;同时未使用using语句管理资源,容易引发连接池泄漏。
修复方案
- 删除第一段无用的数据库连接代码(
conBldng相关的所有代码); - 用
using语句包裹数据库连接、命令和数据阅读器,确保资源自动释放; - 循环时从
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
相关产品推荐
相关产品推荐

