2016-07-20 2 views
0

리더가 멈 춥니 다. 따라서 Select 문에서 Itextsharp와 변수를 사용하여 PDF 파일을 작성하는 코드를 작성했습니다. 데이터베이스로 업데이트합니다. 독자는 내가 만든 쿼리로 여러 결과를 반환해야합니다. 어떤 이유로 첫 번째 결과 이후에 중단됩니다.첫 번째 결과 이후에 C#

누구나 내가 반환해야하는 각 행을 반복하고 while 루프 내에서 데이터베이스에 업데이트하도록 변경해야 할 필요가 있다고 말할 수 있습니까?

여기 내 코드입니다. msdn's example for the MySqlDataReader에 주어진처럼

public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void CreateBtn_Click(object sender, EventArgs e) 
    { 

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

    } 

    public void vaiabless() 
    { 



    } 

    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 transtype = ""; 
     string breaker = "|"; 




     string connetionString = null; 
     MySqlConnection cnn; 
     connetionString = "*************"; 
     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 , accounting.transtype, 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 createcommand = new MySqlCommand(selectCmd, cnn); 
      reader = createcommand.ExecuteReader(); 

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

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

        transtype = reader["transtype"].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(); 





        MemoryStream ms = new MemoryStream(); 
        byte[] bits = new byte[0]; 

        // Make The PDF File 
        Document NewDoc = new Document(iTextSharp.text.PageSize.A4, 0, 0, 0, 0); 
        PdfWriter pdfwri = PdfWriter.GetInstance(NewDoc,ms); 

        NewDoc.Open(); 

        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance("intsa-header.jpg"); 
        img.ScaleAbsolute(596f, 100f); 


        //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 
        #region pdftable 

        //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 + " Total Due: " + Debit)); 
        //Body.HorizontalAlignment = Element.ALIGN_RIGHT; 

        //Caption.Colspan = 0; 
        //Caption.HorizontalAlignment = 1; 
        //General_Table.AddCell(Caption); 
        //General_Table.AddCell(Body); 
        PdfPTable mytable = new PdfPTable(3); 
        mytable.SpacingBefore = 40f; 



        Paragraph accountpar = new Paragraph("Description"); 
        accountpar.IndentationLeft = 200f; 
        accountpar.SpacingBefore = 30f; 
        accountpar.SpacingAfter = 10f; 

        Paragraph Referencepar = new Paragraph(Reference); 
        Referencepar.IndentationLeft = 200f; 
        Referencepar.SpacingBefore = 30f; 
        Referencepar.SpacingAfter = 10f; 

        Paragraph Totalpar = new Paragraph("Total Due:" + "R" + Debit); 
        Totalpar.IndentationLeft = 200f; 
        Totalpar.SpacingBefore = 30f; 
        Totalpar.SpacingAfter = 10f; 


        Paragraph Refnumpar = new Paragraph("Reference Num: "+refnum); 
        Refnumpar.IndentationLeft = 150f; 
        Refnumpar.SpacingBefore = 10f; 
        Refnumpar.SpacingAfter = 30f; 


        mytable.AddCell(Refnumpar); 
        mytable.AddCell(Referencepar); 
        mytable.AddCell(Totalpar); 

        #endregion 


        //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(accountpar); 
        //NewDoc.Add(Supscriptionpar); 
        NewDoc.Add(mytable); 

        //save Pdf 
        NewDoc.Close(); 
        bits = ms.ToArray(); 






        string updateCmd = "UPDATE users.accounting SET acc_pdf = @acc_pdf WHERE refnum =" + refnum; 
        MySqlConnection cnnx; 
        connetionString = "****************"; 
        cnnx = new MySqlConnection(connetionString); 
        MySqlCommand Updatecommand = new MySqlCommand(updateCmd, cnnx); 
        Updatecommand.Parameters.AddWithValue("@acc_pdf", bits); 
        cnnx.Open(); 
        Updatecommand.ExecuteNonQuery(); 

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



    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 
} 

}

+0

데이터베이스에서 직접 실행하면 쿼리 결과가 두 개 이상 반환됩니까? –

+3

[MCVE] –

+0

을 참조하십시오. 쿼리가 여러 레코드를 반환합니까? 예외는 없습니까? –

답변

2

시도는 문장의 순서를 변경하려면 :

쿼리 수익을합니까 :

if (reader.HasRows) 
    { 
     while (reader.Read()) 
     { 
      Console.WriteLine("{0}\t{1}", reader.GetInt32(0), 
       reader.GetString(1)); 
     } 
    } 
    else 
    { 
     Console.WriteLine("No rows found."); 
    } 

는 또한 @Cameron 땜장이가 무엇을 요구 확인 데이터베이스에서 직접 실행하면 여러 결과가 나타 납니까?

리소스가 누출되지 않도록하려면 reader.Close(); 및 해당 연결을 닫는 것을 잊지 마십시오. (using 키워드를 더 잘 사용하십시오.)

+0

나는 이것이 프로그램이 얼어있는 이유라고 생각한다. 아프다. –

관련 문제