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查询正常运行截图:

内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

