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

C#连接Oracle查询去重姓名无法在网页Label控件正常显示求助

C#反馈表单重复录入人员姓名展示问题

需求背景

  • 开发者为C#初学者,当前正在开发反馈表单功能,需要在页面中展示被重复录入n次的人员姓名
  • 业务场景:数据库中存在9条指向同一人员的重复反馈记录(同一人员对应9次提交的反馈数据),需要在结果页面展示该重复出现的公共姓名
  • 当前进展:SQL查询可正常从数据库中筛选出单条去重数据,但无法将查询到的数据正确展示在网页上,需要补全、修正代码实现预期效果

原有问题代码

public void cal_F2name()
{       
    string oracledb = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP****))(****))(CONNECT_DATA =(SERVER = DEDICATED)(SID = ORCL));";
    OracleConnection conn = new OracleConnection(oracledb);
    conn.Open();

    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    OracleDataAdapter da1 = new OracleDataAdapter();
    DataTable dt1 = new DataTable();
    DataSet ds1 = new DataSet();

    cmd.CommandText = "SELECT DISTINCT (F2NAME) FROM CMDC_FEEDBACK WHERE PRG_NAME ='" + cb_prg_name.SelectedValue + "'";

    da1.SelectCommand = cmd;
    da1.Fill(ds1);
    name = Convert.ToString(ds1.Tables[0].Rows[0][0].ToString());

    Label58.Text = String.Format("{0:0.00}",name);

    conn.Close();
}

问题点说明

  • 格式化逻辑错误:String.Format("{0:0.00}",name)是数值类型保留两位小数的格式化规则,姓名字段为字符串类型,该格式化方式无法正确展示文本
  • 存在SQL注入风险:直接拼接下拉框选中值到SQL语句中,未使用参数化查询,存在安全隐患
  • 资源泄漏风险:未做异常捕获和资源释放保障,若查询过程抛出异常,数据库连接无法正常关闭
  • 边界场景缺失:未判断查询结果是否为空,无匹配数据时直接取Rows[0][0]会触发索引越界异常

修正后代码

public void cal_F2name()
{       
    string oracledb = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP****))(****))(CONNECT_DATA =(SERVER = DEDICATED)(SID = ORCL));";
    // using语句会在代码块执行结束后自动释放数据库连接、命令、适配器资源,避免连接泄漏
    using(OracleConnection conn = new OracleConnection(oracledb))
    {
        conn.Open();
        string sql = "SELECT DISTINCT F2NAME FROM CMDC_FEEDBACK WHERE PRG_NAME = :prgName";
        using(OracleCommand cmd = new OracleCommand(sql, conn))
        {
            // 使用参数化查询避免SQL注入
            cmd.Parameters.Add(new OracleParameter(":prgName", cb_prg_name.SelectedValue));
            OracleDataAdapter da1 = new OracleDataAdapter(cmd);
            DataSet ds1 = new DataSet();
            da1.Fill(ds1);
            
            // 先判断查询结果是否存在数据,避免空引用、索引越界异常
            if(ds1.Tables[0].Rows.Count > 0)
            {
                string name = ds1.Tables[0].Rows[0]["F2NAME"].ToString();
                // 字符串类型直接赋值即可,不需要数值格式化规则
                Label58.Text = name;
            }
            else
            {
                Label58.Text = "无匹配人员信息";
            }
        }
    }
}

参考截图

  • 数据库数据截图:数据库数据截图
  • SQL查询正常运行截图:SQL查询正常运行截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:00:59