[C#打印在多页上打印数据库值时将无限进行

问题描述 投票:0回答:1
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    int kx = 25;
    int ky = 50;
    con.Close();
    con.Open();
    String sql = "SELECT * from cash_bill";
    cmd = new OleDbCommand(sql, con);
    dr1 = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    while (dr1.Read()) 
    {
        e.Graphics.DrawString(dr1[7].ToString(), printFont, Brushes.Black, kx + 75, ky + 5);


        if (itemperpage < 29) 
        {
            itemperpage += 1; 
            e.HasMorePages = false; 
            ky = ky + 50;
        }

        else 
        {
            itemperpage = 0; 
            e.HasMorePages = true; 
             return;

        }

    }
    con.Close();
}
c# printing oledb
1个回答
0
投票
  1. 尝试using语句,而不是打开和关闭连接每次。
  2. [不要尝试一次获取所有cash_bill行查询。尝试使用Top()关键字限制结果。
  3. 重新查询通过在查询中添加ID> X条件。
  4. 生成查询并在while循环内进行调用。并更新X参数以查询结果中的最大id值表示。

示例查询:

字符串查询= string.Format(“从cash_bill的SELECT TOP({0}),其中id> {1}”,maxRowPerPage,maxRowId);

在每个循环结束时更新maxRowId。 (PS:我假设值按ID排序)

此方法将减少代码的时间和代码复杂性,并提高sql连接的使用效率。

此外,您可能会考虑使用多个线程。通过此改进,由于您将通过单个查询收集单个页面的数据,因此您可以同时操作和打印数据。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.