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

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();
}
lbanzg99 回答:在多页上打印数据库值时,C#打印无限进行

  1. 尝试使用语句,而不是打开和关闭连接 每次。
  2. 不要尝试一次获取所有cash_bill行 查询。尝试使用Top()关键字限制结果。
  3. 细化查询 通过在查询中添加ID> X条件。
  4. 生成查询 并在while循环内进行调用。并更新X 参数是查询结果中最大ID值。

示例查询:

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

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

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

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

希望这会有所帮助。

本文链接:https://www.f2er.com/3023334.html

大家都在问