在控制台应用程序中编译SQL报告

时间:2011-02-07 12:25:29

标签: c# sql email console export-to-pdf

我必须编写一个可以在数据库上运行sql查询的控制台应用程序。然后,应用程序必须获取此信息并将其编译为报告,将此报告导出为pdf,然后通过电子邮件发送pdf报告。 (所有这一切必须自动发生 - 我将使用Windows Scheduler在特定的日期和时间运行此应用程序。)

这是我到目前为止所做的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Sql;
using System.Data.SqlClient;
using System.IO;
using System.Net.Mail;

namespace SqlQueryReports
{
class Program
{
    static void Main(string[] args)
    {
        SqlConnection dataConnection = new SqlConnection();
        try
        {
            dataConnection.ConnectionString ="Data Source=MY-PC\\SQLEXPRESS;Initial Catalog=mydb;Integrated Security=True;Pooling=False";
            dataConnection.Open();

            SqlCommand dataCommand = new SqlCommand();
            dataCommand.Connection = dataConnection;

            dataCommand.CommandText = "SELECT Product_id,Product_name,Product_price FROM Product";
            Console.WriteLine("About to execute: {0}\n\n", dataCommand.CommandText);

            SqlDataReader dataReader = dataCommand.ExecuteReader();

            // Compile data into Report
            // Export Report to .pdf
            // Email .pdf report

            dataReader.Close();

            Console.WriteLine("DONE");
        }
        catch(SqlException e)
        {
            Console.WriteLine(e.Message);
        }

        finally
        {
            dataConnection.Close();
        }

    }       
}
}

我只需知道如何:

  1. 使用此信息编译报告。
  2. 将此报告导出为pdf
  3. 通过电子邮件发送pdf报告。
  4. 提前致谢!

2 个答案:

答案 0 :(得分:0)

如果你想在一个用户友好的设计师中很好地设计报告,你可以使用DevExpress的XtraReports或任何其他第三方报告引擎,它们通常允许你绑定一个DataSource并导出为pdf(或excel,html, png等等......)。

如果你想自己做所有事情,你可以用一个表(例如)格式化一种HTML文档,你可以在dataReader字段和列中组成网格循环,然后你应该使用任何允许你创建的组件一个pdf文档,最后你可以使用.NET Framework的内置Smtp邮件通过电子邮件发送pdf。

答案 1 :(得分:0)

真的希望你对这个有更多的意见,因为我基本上只得到了完全相同的任务。这是我迄今为止发现的可能有用的内容;只是一个示例PDF导出(来源:ASP片段)...

protected void ExportToPDF(object sender, EventArgs e)
{
    //Get the data from database into datatable
    string strQuery = "select CustomerID, ContactName, City, PostalCode"     +
        " from customers";
    SqlCommand cmd = new SqlCommand(strQuery);
DataTable dt = GetData(cmd);

//Create a dummy GridView
GridView GridView1 = new GridView();
GridView1.AllowPaging = false;
GridView1.DataSource = dt;
GridView1.DataBind();

Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition",
    "attachment;filename=DataTable.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
GridView1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();