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

如何使用VB.NET一次性导出所有筛选记录为PDF文件

解决VB.NET导出所有数据库记录到PDF的问题

以下是修改后的完整代码,可实现导出所有记录到PDF,同时优化了表格结构和错误处理:

' 创建PDF表格,设置列数为4
Dim table As New PdfPTable(4)
table.TotalWidth = 416.0F
table.LockedWidth = False
Dim widths As Single() = New Single() {1.0F, 2.0F, 1.5F, 2.0F} ' 调整列宽比例适配内容
table.SetWidths(widths)
table.HorizontalAlignment = 0
table.SpacingBefore = 20.0F
table.SpacingAfter = 30.0F

' 添加表格标题
Dim titleCell As New PdfPCell(New Phrase("学生出勤记录"))
titleCell.Colspan = 4
titleCell.Border = 0
titleCell.HorizontalAlignment = 1 ' 居中对齐
titleCell.PaddingBottom = 10.0F ' 增加标题下方间距
table.AddCell(titleCell)

' 添加表格列表头
table.AddCell(New Phrase("ID"))
table.AddCell(New Phrase("姓名"))
table.AddCell(New Phrase("班级"))
table.AddCell(New Phrase("日期"))

' 数据库连接字符串
Dim connect As String = "Data Source=DESKTOP-D32ONKB;Initial Catalog=Attendance;Integrated Security=True"

Using conn As New SqlConnection(connect)
    ' 使用Using确保Document和PdfWriter资源自动释放
    Using pdfDoc As New Document()
        Dim outputPath As String = $"D:\pdf\{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}.pdf"
        Using pdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream(outputPath, FileMode.Create))
            pdfDoc.Open()

            ' 修改SQL语句,移除ID参数限制,查询所有记录
            ' 如需自定义筛选条件,可添加WHERE子句,例如:WHERE Date BETWEEN '2022-11-01' AND '2022-11-02'
            Dim query As String = "SELECT ID, Name, Class, Date FROM stuattrecordAMPM"
            Dim cmd As New SqlCommand(query, conn)

            Try
                conn.Open()
                Using rdr As SqlDataReader = cmd.ExecuteReader()
                    ' 遍历所有记录添加到表格
                    While rdr.Read()
                        table.AddCell(rdr("ID").ToString())
                        table.AddCell(rdr("Name").ToString())
                        table.AddCell(rdr("Class").ToString())
                        ' 格式化日期显示(可选,按需调整)
                        table.AddCell(Convert.ToDateTime(rdr("Date")).ToString("dd-MM-yyyy"))
                    End While
                End Using

                ' 将表格添加到PDF文档
                pdfDoc.Add(table)
                MessageBox.Show($"PDF已成功导出到:{outputPath}")
            Catch ex As Exception
                MessageBox.Show($"导出失败:{ex.Message}")
            Finally
                If conn.State = ConnectionState.Open Then
                    conn.Close()
                End If
                pdfDoc.Close()
            End Try
        End Using
    End Using
End Using

关键修改点说明:

  • 移除ID筛选限制:删除原SQL语句的WHERE ID=@ID,改为查询全表记录;如果需要特定筛选条件(如日期范围、班级等),只需在SQL语句中添加对应的WHERE子句即可,无需保留原ID参数。
  • 添加表格列表头:新增ID、姓名、班级、日期的表头行,让PDF表格结构更清晰。
  • 优化资源管理:将Document和PdfWriter也放入Using语句中,确保资源自动释放,避免内存泄漏。
  • 完善错误处理:添加错误提示弹窗,同时在Finally块中确保数据库连接和文档正确关闭,避免无声失败。
  • 调整列宽与日期格式化:修改列宽比例适配内容,对日期字段做格式化处理,保证显示一致性。

如果需要导出特定筛选条件的记录,只需修改SQL语句即可,例如:

SELECT ID, Name, Class, Date FROM stuattrecordAMPM WHERE Class = '1st' AND Date >= '2022-11-01'

若需动态传递筛选参数,可重新添加SQL参数,例如:

Dim query As String = "SELECT ID, Name, Class, Date FROM stuattrecordAMPM WHERE Class = @Class"
cmd.Parameters.Add("@Class", SqlDbType.VarChar).Value = "1st"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:40:28