2015-09-22 4 views
-1

Почему прямоугольник не рисовал? Есть ли ошибка в моем коде? Я пытаюсь создать прямоугольник через SqlDataReader в то время как пункт ..Прямоугольник не рисовал через SQLDataReader, а статья

private void PrintsDoc (object sender, PrintPageEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    StringFormat sf = new StringFormat(); 
    sf.Alignment = StringAlignment.Center; 
    sf.LineAlignment = StringAlignment.Near; 

    Font fontStyle = new Font ("Times New Roman", 30); 
    Font fontStyle2 = new Font ("Times New Roman", 10); 
    g.DrawString ("Trade Confirmation", fontStyle, Brushes.Black, e.MarginBounds, sf); 
    g.DrawString ("\n\n\nTrade Date: " + dt + "\nPrint Date: " + DateTime.Now.ToString(), fontStyle2, Brushes.Black, e.MarginBounds, sf); 

    SqlConnection conn = new SqlConnection("Server=WORKERCOMP\\SQLEXPRESS;" + "Database=database;" + "User ID=uid;" + "Password=pwd;" + "Trusted_Connection=yes;"); 
    conn.Open(); 

    int i = 0, j = 0; 
    SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'dbo.TRADE'", conn); 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    while (rdr.Read()) { 
     Rectangle rec = new Rectangle (new Point (40 + i, 250), new Size (200, 25)); 
     g.DrawRectangle (Pens.Black, rec); 
     g.DrawString (rdr.GetString(0 + j), fontStyle2, Brushes.Black, rec, sf); 
     i = i + 215; 
     j = j + 1; 
    } 

    e.HasMorePages = false; 
    conn.Close(); 
} 
+0

Go отладки. Поместите точки останова, выполните свой код, проверьте свою переменную. Если 'while()' не выполняется, ваш запрос не дает никаких результатов. – CodeCaster

+0

Эй, я тестировал этот SQLCommand в SQL Server Management Studio, и он имеет результаты. Поэтому я думаю, что предложение while должно выполняться. Но почему прямоугольник не рисовал –

+0

Вы уверены, что попробовали его в SSMS? TABLE_NAME не включает SCHEMA_NAME. –

ответ

0
private void PrintsDoc (object sender, PrintPageEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    StringFormat sf = new StringFormat(); 
    sf.Alignment = StringAlignment.Center; 
    sf.LineAlignment = StringAlignment.Near; 

    Font fontStyle = new Font ("Times New Roman", 30); 
    Font fontStyle2 = new Font ("Times New Roman", 10); 
    g.DrawString ("Trade Confirmation", fontStyle, Brushes.Black, e.MarginBounds, sf); 
    g.DrawString ("\n\n\nTrade Date: " + dt + "\nPrint Date: " + DateTime.Now.ToString(), fontStyle2, Brushes.Black, e.MarginBounds, sf); 

    using (SqlConnection conn = new SqlConnection(@"Server=.\SQLEXPRESS;Database=database;Trusted_Connection=yes;")) 
    using (SqlCommand cmd = new SqlCommand("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TRADE'", conn)) 
    { 
    conn.Open(); 
    int i = 0, j = 0; 
    SqlDataReader rdr = cmd.ExecuteReader(); 
    while (rdr.Read()) { 
     Rectangle rec = new Rectangle (new Point (40 + i, 250), new Size (200, 25)); 
     g.DrawRectangle (Pens.Black, rec); 
     //g.DrawString (rdr.GetString(0 + j), fontStyle2, Brushes.Black, rec, sf); 
     g.DrawString ((string)rdr["COLUMN_NAME"], fontStyle2, Brushes.Black, rec, sf); 
     i = i + 215; 
     j = j + 1; // what is the purpose of j? 
    } 

    e.HasMorePages = false; 
    conn.Close(); 
    } 
} 
+0

Да, я пробовал TABLE_NAME в SSMS и отлично работает. Я использую j для увеличения rdr.GetString (номер столбца) –

+0

Тогда он должен быть GetString (0 или 1 - константа). –