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

C#中从SQL数据库加载指定PO_No行到DataGridView遇异常求解决

解决ComboBox选中PO_No后DataGridView仅显示单行且报错的问题

我看了你的代码和问题描述,这个问题主要是因为你用了手动循环给DataGridView赋值的方式,加上没有正确处理行的创建,同时还忽略了WinForms里DataGridView绑定的标准做法,才导致了索引越界的错误和只能显示单行的问题。

问题根源分析

  • 索引越界错误:你的代码里直接用dataGridView1.Rows[i]去赋值,但DataGridView初始状态下没有行(或者只有固定行数),当i超过现有行的数量时,就会抛出类似截图里的索引超出范围的异常。
  • 只能显示单行:就算你提前创建了一行,循环里的i++也只会填充现有行,多余的数据根本没法显示,自然只能看到单行。
  • 额外风险:你用字符串拼接的方式写SQL语句,存在严重的SQL注入风险,而且如果PO_No里包含单引号这类特殊字符,还会直接导致SQL语法错误。

修复方案(推荐用标准数据绑定方式)

直接用DataTable绑定到DataGridView的DataSource是WinForms里最可靠、最简洁的做法,不需要手动循环赋值,还能自动处理行的创建。下面是修改后的代码:

public void loadPOCarttable()
{
    // 使用using语句自动释放数据库连接资源,避免内存泄漏
    using (DynamicConnection con = new DynamicConnection())
    {
        try
        {
            // 改用参数化查询,彻底避免SQL注入和语法错误
            con.sqlquery(@"select b.BookName, b.ISBN_No, p.OrderQuantity, p.UnitPrice, p.Total 
                           from TBL_Book b 
                           inner join TBL_PO_Cart p on b.ISBN_No = p.ISBN_No 
                           where PO_No = @PO_No");
            
            // 给SQL查询添加参数(这里需要确保你的DynamicConnection类支持参数操作,如果不支持,建议改用.NET原生的SqlCommand)
            con.command.Parameters.AddWithValue("@PO_No", cmbPO.Text);
            
            con.mysqlconnection();
            con.datatable();
            
            // 直接将填充好的DataTable绑定到DataGridView,自动生成所有行和列
            dataGridView1.DataSource = con.table;

            // 如果你需要自定义列标题,可以在这里设置,比如:
            // dataGridView1.Columns["BookName"].HeaderText = "图书名称";
            // dataGridView1.Columns["ISBN_No"].HeaderText = "ISBN编号";
        }
        catch (Exception ex)
        {
            MessageBox.Show("发生错误:" + ex.Message);
        }
    }
}

额外注意事项

  • 如果你的DynamicConnection类封装有问题,建议直接使用.NET原生的SqlConnection、SqlCommand和SqlDataAdapter来操作数据库,这样更稳定也更容易排查问题。
  • 如果你需要保留手动设置列的样式,可以先设置dataGridView1.AutoGenerateColumns = true(默认就是true),或者提前定义好列,再绑定数据。
  • 永远不要用字符串拼接的方式构建SQL查询,参数化查询是必须的,既安全又能避免很多语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:41