我如何循环遍历 sql 结果以使用 itextsharp 填充 pdf

how do i loop through sql results to populate a pdf using itextsharp

我正在尝试使用 iTextSharp 从多个 SQL 查询中填充 PDF。 要填写表格的第 1 部分,即查询 returns 1 name,对于第二部分,我需要遍历我的结果,这是我遇到了一些麻烦的地方。

        using (var connection2 = new SqlConnection("Data Source=PUMA; Initial Catalog=CACTUS; User ID=somethinguser; Password=digital; Connection Timeout=50"))
        {
            using (var command2 = connection2.CreateCommand())
            {
                command2.CommandText = "SELECT * from MikeACATest WHERE SSN = " + SSN + "and RELATIONCODE <> '01'";
                connection2.Open();

                using (var reader2 = command2.ExecuteReader())
                {
                    while (reader2.Read())
                    {
                        var dNAME = reader2.GetValue(reader2.GetOrdinal("NAME"));
                        var dDOB = reader2.GetValue(reader2.GetOrdinal("DOB"));
                        var dP2_16_ALL = reader2.GetValue(reader2.GetOrdinal("P2_16_ALL"));
                        var dP2_16_1 = reader2.GetValue(reader2.GetOrdinal("P2_16_1"));
                        var dP2_16_2 = reader2.GetValue(reader2.GetOrdinal("P2_16_2"));
                        var dP2_16_3 = reader2.GetValue(reader2.GetOrdinal("P2_16_3"));
                        var dP2_16_4 = reader2.GetValue(reader2.GetOrdinal("P2_16_4"));
                        var dP2_16_5 = reader2.GetValue(reader2.GetOrdinal("P2_16_5"));
                        var dP2_16_6 = reader2.GetValue(reader2.GetOrdinal("P2_16_6"));
                        var dP2_16_7 = reader2.GetValue(reader2.GetOrdinal("P2_16_7"));
                        var dP2_16_8 = reader2.GetValue(reader2.GetOrdinal("P2_16_8"));
                        var dP2_16_9 = reader2.GetValue(reader2.GetOrdinal("P2_16_9"));
                        var dP2_16_10 = reader2.GetValue(reader2.GetOrdinal("P2_16_10"));
                        var dP2_16_11 = reader2.GetValue(reader2.GetOrdinal("P2_16_11"));
                        var dP2_16_12 = reader2.GetValue(reader2.GetOrdinal("P2_16_12"));

                        for (int i = 17; i < Convert.ToInt32(3) + 17; i++)
                        { //pdfFormFields declared earlier
                            pdfFormFields.SetField("Part[3]." + i + "a.CoveredUserName", dNAME.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "c.CoveredUserDOB", dDOB.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "d.cb.CoveredMonths[All]", dP2_16_ALL.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Jan]", dP2_16_1.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Feb]", dP2_16_2.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Mar]", dP2_16_3.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Apr]", dP2_16_4.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[May]", dP2_16_5.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[June]", dP2_16_6.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[July]", dP2_16_7.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Aug]", dP2_16_8.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Sept]", dP2_16_9.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Oct]", dP2_16_10.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Nov]", dP2_16_11.ToString());
                            pdfFormFields.SetField("Part[3]." + i + "e.cb.CoveredMonths[Dec]", dP2_16_12.ToString());
                            reader2.NextResult();
                        }
                    }
                }
                connection2.Close();
            }
        }
        pdfStamper.FormFlattening = false;
        pdfStamper.Close();
    }

此代码的问题是命令查询 "SELECT * from MikeACATest WHERE SSN = " + SSN + "and RELATIONCODE <> '01'"; returns 3 个名字:Debra、Parker 和 Sarah。

我需要做的是计算显示的名称数量并遍历每个名​​称,填充 PDF。我知道如何填充 PDF,但我的问题是循环查询。

在我的 for 循环中(顺便说一句,这不起作用),我硬编码了数字 3,所有 3 个名字都是妻子的名字 (http://imgur.com/f4diZk4)。

成功了

reader2.NextResult(); 导致了这个问题,因为这意味着同时进行多个搜索查询,例如 select * from groupA; select....