如何使用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
相关产品推荐
相关产品推荐

