【问题标题】:Getting multiple results from one select query从一个选择查询中获取多个结果
【发布时间】:2016-11-14 09:30:08
【问题描述】:

所以我被我的代码卡住了,并彻底尝试寻找答案。

我有 1 条 select 语句带来 52806 个结果。

我将运行的查询结果放入变量中,然后将其放入我制作的 PDF 文件中。在第一个结果之后它不起作用。我想让它把结果放在我的 pdf 文件中,然后转到下一个结果。

如果有人能帮助我,我将不胜感激。

这是我的代码。抱歉,提前做了不好的做法。

    private void CreateBtn_Click(object sender, EventArgs e)
    {

        try
        {
            make_pdf();
        }
        catch (Exception exe )
        {
            MessageBox.Show("failed");
        }

    }

    public static void make_pdf()
        {
        string Contact = "";
        string emailAddress = "";
        string Tel = "";
        string InvoiceDate = "";
        string address = "";
        string Reference = "";
        string AccountNo = "";
        string Debit = "";
        string Credit = "";
        string refnum = "";





        string connetionString = null;
        MySqlConnection cnn;
        connetionString = "server=********;user id=web_support;database=users;password=!w3b_supp0rt~;persistsecurityinfo=True";
        cnn = new MySqlConnection(connetionString);
        try
        {
            cnn.Open();
           // MessageBox.Show("Connection Open ! ");

        }
        catch (Exception ex)
        {
            MessageBox.Show("Can not open connection ! ");
        }


        try
        {
            MySqlDataReader reader = null;
            string selectCmd = "SELECT accounting.code,users.curr_email , users.physicaddr ,accounting.date , accounting.refnum , users.telephone , accounting.debit , accounting.acc_pdf, accounting.credit, accounting.reference, users.contact, accounting.transnum FROM accounting INNER JOIN users ON accounting.code = users.code WHERE(accounting.transtype = 1)";

            MySqlCommand command = new MySqlCommand(selectCmd, cnn);
            reader = command.ExecuteReader();

            while (reader.Read())
            {
                if (reader.HasRows)
                {

                    //get account number
                    AccountNo = reader["code"].ToString();
                    //get emailaddress
                    emailAddress = reader["curr_email"].ToString();

                    //get Contact Name
                    Contact = reader["contact"].ToString();

                    //get telephone number
                    Tel = reader["telephone"].ToString();

                    //Get Date
                    InvoiceDate = reader["date"].ToString();

                    //Get reference
                    Reference = reader["reference"].ToString();

                    //Get Address
                    address = reader["physicaddr"].ToString();

                    //Get Debit
                    Debit = reader["debit"].ToString();

                    //Get Credit
                    Credit = reader["credit"].ToString();

                    //Get Refnum
                    refnum = reader["refnum"].ToString();


                    //  MessageBox.Show(address+" "+Reference+" "+InvoiceDate+" "+emailAddress+" "+AccountNo+" "+Contact);


                    // Make The PDF File
                    Document NewDoc = new Document(iTextSharp.text.PageSize.A4, 0, 0, 0, 0);
                    PdfWriter pdfwri = PdfWriter.GetInstance(NewDoc, new FileStream("text.pdf", FileMode.Create));

                    NewDoc.Open();

                    iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance("intsa_header_small.jpg");
                    // Paragraph par = new Paragraph("Everything is working");

                    //Account List
                    List AccountNolist = new List(List.UNORDERED);
                    AccountNolist.SetListSymbol("");
                    AccountNolist.IndentationLeft = 300f;
                    AccountNolist.Add(new ListItem("AccountNo   " + AccountNo));

                    // AddressList
                    List AddressList = new List(List.UNORDERED);
                    AddressList.SetListSymbol("");
                    AddressList.IndentationLeft = 300f;
                    AddressList.Add(new ListItem("Address:  " + address));
                    #region Emailaddresslist
                    //EmailAddressList
                    List emailAddresslist = new List(List.UNORDERED);
                    emailAddresslist.SetListSymbol("");
                    emailAddresslist.IndentationLeft = 300f;
                    emailAddresslist.Add(new ListItem("Email address:  " + emailAddress));
                    #endregion
                    //ContactList
                    List Contactlist = new List(List.UNORDERED);
                    Contactlist.SetListSymbol("");
                    Contactlist.IndentationLeft = 300f;
                    Contactlist.Add(new ListItem("Contact:  " + Contact));

                    //TelephoneList
                    List Telephonelist = new List(List.UNORDERED);
                    Telephonelist.SetListSymbol("");
                    Telephonelist.IndentationLeft = 300f;
                    Telephonelist.Add(new ListItem("Tel:  " + Tel));

                    // Make a Table


                    PdfPTable General_Table = new PdfPTable(1);
                    General_Table.SpacingBefore = 50f;
                    General_Table.SpacingAfter = 50f;

                    PdfPCell Caption = new PdfPCell(new Phrase("Description"));

                    PdfPCell Body = new PdfPCell(new Phrase("       " + refnum + "    " + Reference + "   Debit: " + Debit + "   Credit: " + Credit));
                    Body.HorizontalAlignment = Element.ALIGN_RIGHT;

                    Caption.Colspan = 0;
                    Caption.HorizontalAlignment = 1;
                    General_Table.AddCell(Caption);
                    General_Table.AddCell(Body);


                    // NewDoc.Add(par);

                    //add Image to pdf
                    NewDoc.Add(img);
                    //add accountNo to pdf
                    NewDoc.Add(AccountNolist);
                    //add Contact to pdf
                    NewDoc.Add(Contactlist);

                    //add emailaddress to pdf
                    NewDoc.Add(emailAddresslist);
                    //add Telephone Number to pdf
                    NewDoc.Add(Telephonelist);

                    //add address to pdf
                    NewDoc.Add(AddressList);

                    NewDoc.Add(General_Table);

                    //save Pdf
                    NewDoc.Close();




                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

【问题讨论】:

  • 您从连接字符串中删除了服务器名称并在那里忘记了密码。恭喜!现在黑客只需要找到服务器并且他们已经拥有凭据。您最好在为时已晚之前更改该密码。
  • 好吧,如果他们能连接到它,那就是我的客人。祝你好运,服务器正在离线运行。
  • 黑客可能来自组织内部,他们已经知道服务器在哪里。除非您是唯一有权访问数据库的人,或者其他人已经拥有对数据库的完全访问权限。
  • 只有我可以访问服务器。但感谢您指出。下次我问问题时会记住:)

标签: c# mysql database reader


【解决方案1】:

问题是您在 while 循环中创建 PDF 文件,我认为您不需要 52k PDF 文件,因此您应该先创建 PDF 文件,然后遍历所有结果并将它们粘贴到文件中.

编辑:我建议在insert/update PDF to database 之后添加一行

NewDoc.Close();

然后在再次运行循环之前删除本地文件(text.pdf)。

【讨论】:

  • 嗨 hynek 感谢您的回复。生病试一试。但我不得不说,我实际上是为了让 52k pdf 文件进入数据库。
  • 那么你应该在while循环中创建pdf文件,但我注意到你有pdf文件的静态名称,如果你想要多个文件,你需要更改名称每个文件(可能通过自动递增值或联系人姓名)
  • 好的,我明白你在说什么。您认为我可以通过在每个结果之后将 pdf 文件插入数据库然后转到下一个结果来解决问题吗?因为我想生成带有查询结果的pdf文件-将其更新到数据库中,然后转到下一个结果。还是太多了?
  • 我不知道您到底打算如何处理数据库中的文件,但我认为仅在需要使用 PDF 文件时创建 PDF 文件会是更好的解决方案。例如:用户需要签署您在pdf文件中制作的表格,您将在从网站下载之前生成PDF,甚至不会将其存储在数据库中。
  • 另外我想生成带有查询结果的pdf文件-将其更新到数据库中然后转到下一个结果也可以,但我没有体验它。您只需在循环末尾添加更新/插入语句,然后删除文件。请始终用@记下我的名字,以便在您需要回答时看到通知
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 2021-04-29
  • 1970-01-01
  • 2012-07-13
  • 2023-03-11
  • 1970-01-01
  • 2022-07-27
  • 2023-03-23
相关资源
最近更新 更多