昨天又是一个通晓搞水晶报表
。白天睡了一天。不过值得庆幸的是终于在web下以及在Windows Application中可以正常使用pull and push模式了。关于水晶报表传递参数的问题还没研究,估计不会太难。下面将关于水晶报表的使用笔记如下:
水晶报表 Web 查看器文件夹 NTFS 权限的问题
(1)错误提示:
“/WebApplication1”应用程序中的服务器错误。
登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
(2)相关文件夹:
VS.NET Crystal Reports: C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers
Crystal Reports 9.2: C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers
水晶报表文件所在的文件夹,或者导出时的目标文件夹 NTFS 权限的问题
(1)错误提示:
登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
设置上述文件夹的“安全”,即 NTFS 权限:
最简单的办法是给 Everyone 用户加“完全控制”权限!
(1)为当前用户,如:Administrator,,添加“写入”权限;
(2)为用户 ASPNET、SYSTEM、匿名用户(通常为 IUSR_MACHINENAME)、经过身份验证的请求用户添加“写入”权限。
在PULL模式下使用水晶报表
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
{
TableLogOnInfo log = new TableLogOnInfo();
log.ConnectionInfo.ServerName = "wudi";
log.ConnectionInfo.DatabaseName = "YabOA";
log.ConnectionInfo.UserID = "asp.net";
log.ConnectionInfo.Password = "exit";
ReportDocument rd = new ReportDocument();
string RptPath = null;
RptPath =Server.MapPath("CrystalReport2.rpt");
rd.Load(RptPath);
rd.Database.Tables[0].ApplyLogOnInfo(log);
this.CrystalReportViewer1.ReportSource = rd;
this .CrystalReportViewer1.DataBind();
}
在PUSH模式下使用
生成一个数据集文件,然后创建要查询信息的结构(可从数据库中托经来),然后生成项目
添加Crystal Reports组件,并设置相关信息,字段连接到刚才生成的数据集文件中的表(如果刚才创建后没有生成项目,这里看不到那个数据集文件的表格)
代码如下:
using CrystalDecisions.Shared;
using System.Configuration;
{
string connectString = "server=.;user id=ASP.NET;initial catalog=Yaboa;password=exit";
SqlConnection MyConnection = new SqlConnection(connectString);
MyConnection.Open();
string sqlstring = "select xh,sh,qy from baseinfoVwOfZb";
SqlDataAdapter MyCommand = new SqlDataAdapter(sqlstring,MyConnection);
DataSet ds = new DataSet();
MyCommand.Fill(ds,"baseinfoVwOfZb");
YabOA.CrystalReport1 cr1 = new YabOA.CrystalReport1();
cr1.SetDataSource(ds.Tables["baseinfoVwOfzb"]);
this.CustomerOrderCRViewer.ReportSource = cr1;
}
说明
在web中和在windowsApplication中水晶报表的使用略有不同。在Web中经常会遇到权限的问题。