我必须编写一个可以在数据库上运行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();
}
}
}
}
我只需知道如何:
提前致谢!
答案 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();