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

数据库循环查询仅返回数组最后一个元素结果的问题排查

问题解决:仅最后一个数组元素查询成功的原因及修复方案

问题核心原因

  • 换行符处理不当:Windows环境下文本框的换行是\r\n,用Split('\n')分割后,除最后一个元素外,其余元素末尾会带有\r(回车符),导致查询的订单编码与数据库中存储的不一致,无法匹配。
  • SQL字符串拼接的隐患:直接拼接字符串生成SQL语句,不仅存在SQL注入风险,还会因隐藏字符(如回车符)导致查询条件不匹配,同时无法处理特殊字符的转义问题。
  • DataReader资源管理不规范:手动调用reader.Close()可能因异常导致资源未释放,且未利用using语句自动管理资源生命周期。

修复后的完整代码

// 正确分割文本框内容,去除空行和多余的换行/回车符
allCodes = kodTxtBox.Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

for (int i = 0; i < allCodes.Length; i++)
{
    // 清除编码前后的空白字符,避免隐藏空格影响查询匹配
    string currentCode = allCodes[i].Trim();
    
    // 使用参数化查询,避免SQL注入,同时确保参数正确传递
    string queryString = @"SELECT siparisKod, aciklama, birim, fGrup, birimfiyat 
                          FROM ürünler 
                          WHERE siparisKod = ?";

    using (OleDbCommand query = new OleDbCommand(queryString, connection))
    {
        // 绑定查询参数,指定参数类型和值
        query.Parameters.Add("@siparisKod", OleDbType.VarChar).Value = currentCode;

        // 用using自动管理DataReader资源,无需手动Close
        using (OleDbDataReader reader = query.ExecuteReader())
        {
            if (reader.Read())
            {
                MessageBox.Show($"{currentCode} 查询成功");
                string desc = reader["aciklama"].ToString();
                string monad = reader["birim"].ToString();
                string sellPrice = reader["birimfiyat"].ToString();
                MessageBox.Show($"描述: {desc} 单位: {monad} 单价: {sellPrice}");
            }
            else
            {
                MessageBox.Show($"编码 {currentCode} 查询失败(不存在或匹配错误)");
            }
        }
    }
}

关键改动说明

  1. 修正文本分割逻辑:通过Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)分割文本,同时调用Trim()清除每个编码的前后空白字符,彻底解决隐藏字符导致的匹配失败问题。
  2. 替换为参数化查询:使用OleDb的参数占位符?,通过Parameters.Add传递参数,既避免了SQL注入风险,又能正确处理字符串中的特殊字符,确保查询条件准确。
  3. 自动管理资源:用using语句包裹OleDbCommand和OleDbDataReader,确保资源在使用后自动释放,避免内存泄漏和异常情况下的资源残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:35