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

如何在ASP.NET中通过SQL查询验证产品信息并返回对应提示

代码问题修正方案

原代码核心错误

  • 未做查询结果判断:执行SqlDataReader dr = cmd.ExecuteReader()后没有检查是否返回了匹配的产品数据,无论是否查询到结果都会直接输出成功提示
  • 异常逻辑使用错误:未查询到匹配数据属于业务正常分支,不会抛出系统异常,你将产品不存在的提示放在catch块中完全不符合逻辑,只有数据库连接失败、SQL执行报错这类系统异常才会进入catch分支
  • 资源管理不规范:SqlConnection、SqlCommand、SqlDataReader都属于非托管资源,你没有做自动释放处理,长期运行会导致连接池占满、资源泄漏
  • 连接关闭时机错误:在还未读取SqlDataReader的查询结果时就提前关闭了数据库连接,即使后续要读取数据也无法正常读取

修正后可运行代码

try
{
    string constring = System.Configuration.ConfigurationManager.ConnectionStrings["WebDataBaseConnectionString"].ConnectionString;
    // using语句会在代码块执行结束后自动释放资源,无需手动调用Close()
    using (SqlConnection scon = new SqlConnection(constring))
    {
        scon.Open();
        // 仅查询存在性即可,不需要返回所有字段,性能更高
        using (SqlCommand cmd = new SqlCommand("SELECT TOP 1 1 FROM Product WHERE Name=@Name AND Code=@Code", scon))
        {
            // 增加Trim()过滤用户输入的前后空格,避免不必要的匹配失败
            cmd.Parameters.AddWithValue("@Name", txtName.Text.Trim());
            cmd.Parameters.AddWithValue("@Code", txtCode.Text.Trim());
            object queryResult = cmd.ExecuteScalar();
            if (queryResult != null)
            {
                Label1.Text = "该产品在我们的列表中,谢谢。";
            }
            else
            {
                Label1.Text = "该产品不在我们的列表中,抱歉!";
            }
        }
    }
}
catch (Exception ex)
{
    // 异常分支仅处理系统错误,不用于业务判断
    Label1.Text = $"查询异常,请稍后重试。错误信息:{ex.Message}";
}

额外优化说明

如果需要同时读取产品的其他字段信息,可以保留SqlDataReader的写法,判断dr.HasRows后调用dr.Read()读取对应字段即可,其余资源管理逻辑和上面保持一致。

内容的提问来源于stack exchange,提问作者farzaneh br

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:39:03