急:CrystalReport难倒了我,请高手指点。

liuyonglymn 2003-11-10 01:01:41
1、在asp.net中使用Crystal Report,如果我的数据库登录密码为空可以显示报表,但是如果不为空,则老是报“CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。”,这是什么原因,该如何处理?

  2、我想在程序运行时根据条件产生DataSet数据,然后动态地绑定给CrystalReportViewer对象,那么在.rpt文件的设计阶段如何使用数据库列呢?
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjie1234 2003-11-21
  • 打赏
  • 举报
回复
111
jpyc 2003-11-14
  • 打赏
  • 举报
回复
http://218.56.11.178:8009
zhchg 2003-11-12
  • 打赏
  • 举报
回复
请问一下,如果Dataset或DataTable的结构在设计时不确定,那在设计时候该怎么做呢?
好像在运行时,CrystalReport不能动态生成字段控件
haibodotnet 2003-11-12
  • 打赏
  • 举报
回复
我们采用下面的几步使用Push模式执行水晶报表:
1. 设计一个DataSet
2. 创建一个.rpt文件同时将其指定给上一步建立的DataSet。
3. 在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系。
4. 在代码中访问数据库并把数据存入DataSet
5. 调用DataBind方法。
设计一个DataSet
1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”
2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。
3) 此时在数据集中就会有一个Stores表的结构图。
- .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。
创建 .rpt 文件 :
4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“
6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。
7) 将”Stores"表添加到“选定的表”中,点击“OK”
8) 使用PULL模式下的方法,建立一个WebForm
建立一个Crystal Report Viewer 控件
9) 建立一个Crystal Report Viewer 控件,并设定其属性,此处与PULL模式下是一致的。
Code Behind 代码:
10) 在Page_Load方法中使用下面的子函数:
VB.Net代码:
Sub BindReport()
Dim myConnection As New SqlClient.SqlConnection()
myConnection.ConnectionString= "server= (local)\NetSDK;database=pubs;Trusted_Connection=yes"
Dim MyCommand As New SqlClient.SqlCommand()
MyCommand.Connection = myConnection
MyCommand.CommandText = "Select * from Stores"
MyCommand.CommandType = CommandType.Text
Dim MyDA As New SqlClient.SqlDataAdapter()
MyDA.SelectCommand = MyCommand
Dim myDS As New Dataset1()
'这就是我们在设计模式上使用的DataSet
MyDA.Fill(myDS, "Stores")
'你不得不使用与你前面DataSet相同名字。
Dim oRpt As New ReportDocument()
' 水晶报表绑定
oRpt.SetDataSource(myDS)
' 设定水晶报表的ReportSource
CrystalReportViewer1.ReportSource = oRpt
End Sub
C#代码:
private void BindReport()
{
string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=";
ReportDocument oCR = new ReportDocument();
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Stores";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"stores");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
 
注意:在上面的代码中,你得注意一下oRpt是"Strongly Typed"的报表文件。如果你需要使用"UnTyped"报表,你得使用ReportDocument对象,然后再调用报表文件。
运行你的程序。
11) 运行你的程序
备注:
Dim oRpt As New ReportDocument()
1、在菜单“项目”-〉“添加引用”:CrystalDecisions.CrystalReports.Engine
2、在源代码里添加引用:using CrystalDecisions.CrystalReports.Engine;
Lusun 2003-11-11
  • 打赏
  • 举报
回复
第一个问题不懂,第二个问题我是这样做的:
在开始设计.rpt文件前先准备好该DataSet的架构文件(.xsd),设计时在字段资源管理器中右击数据库字段-〉Add/Remove DataBase ->Project Data选择准备好的xsd就好了。
希望能对你有所帮助。
haibodotnet 2003-11-10
  • 打赏
  • 举报
回复
彻底解决 CrystalReports 登录失败问题(海波.NET,更新:2003-11-07-01)
---------------------------------------------------------------
目录:
一、Crystal Reports 9 最新补丁下载(搜集:海波.NET)
二、原因1:文件夹 NTFS 权限的问题。
三、原因2:PULL 模式,水晶报表中的数据库登录问题(非 Windows 集成身份验证)。
四、原因3:PUSH 模式设置了 TableLogOnInfo,不需要!
五、出错:部署到其它计算机,产生问题:连接失败。错误的登录参数。
六、安全之道:crystalreport 的集成认证如何与NT(2K)SERVER集成?
七、原因4:PULL 模式,水晶报表中的数据库登录问题(Windows 集成身份验证)。
---------------------------------------------------------------
问题:
CrystalReports 登录失败
LogOnException
---------------------------------------------------------------
一、Crystal Reports 9 最新补丁下载
(1)Crystal Reports 9 Database and Export Drivers Monthly Hot Fix
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90dbexwin_en.zip.asp?recDnlReq=Record&dnlPath=cr90dbexwin_en.zip
(2)Crystal Reports 9 Developer Files Monthly Hot Fix
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90devwin_en.zip.asp?recDnlReq=Record&dnlPath=cr90devwin_en.zip
(3)Crystal Reports 9.0 Main Program Files Monthly Hot Fix
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90mainwin_en.zip.asp?recDnlReq=Record&dnlPath=cr90mainwin_en.zip
---------------------------------------------------------------
二、原因1:文件夹 NTFS 权限的问题。
1、水晶报表 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

2、水晶报表文件所在的文件夹,或者导出时的目标文件夹 NTFS 权限的问题
(1)错误提示:
登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。

3、设置上述文件夹的“安全”,即 NTFS 权限:
最简单的办法是给 Everyone 用户加“完全控制”权限!
(1)为当前用户,如:Administrator,,添加“写入”权限;
(2)为用户 ASPNET、SYSTEM、匿名用户(通常为 IUSR_MACHINENAME)、经过身份验证的请求用户添加“写入”权限。
---------------------------------------------------------------
三、原因2:PULL 模式,水晶报表中的数据库登录问题。
运行时登录数据库服务器的方法(PULL 模式)
在报表的cs文件中,加上数据库连接。
1、设置 ReportDocument 的 TableLogonInfo……
Dim ReportDoc As New ReportDocument()
Dim logonInfo As New TableLogonInfo
Dim table As table
ReportDoc.Load("C:\Rpts\publish.rpt")
For Each table IN ReportDoc.DataBase.Tables
logonInfo= table.LogonInfo
with logonInfo.connectioninfo
.serverName= "Localhost"
.Databasename= "pubs"
.UserID= "sa"
.Password=""
End With
table.applyLogonInfo(logonInfo)
next table
Crviewer.reportsource = reportDoc

2、如果是多个相关的表作为报表的数据源,最好使用存储过程或者查询作为数据源。

3、将“数据库连接信息”存放在 web.config 配置文件,易维护。
using CrystalDecisions.Shared ; //负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports.Engine ; //负责解释ReportDocument类

private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
//获取.rpt文件真实路径
string path;
path=Server.MapPath ("cr.rpt");
oRpt.Load (path);

//从web.config中获取logOnInfo参数信息
string a,b,c,d;
//获取ServerName
a=System.Configuration.ConfigurationSettings.AppSettings ["servername"];
//获取DatabaseName
b=System.Configuration.ConfigurationSettings.AppSettings ["database"];
//获取UserId
c=System.Configuration.ConfigurationSettings.AppSettings ["userid"];
//获取password
d=System.Configuration.ConfigurationSettings.AppSettings ["pass"];
//设置logOnInfo参数
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;

oRpt.Database.Tables [0].ApplyLogOnInfo (logOnInfo);

//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;

DataBind();
}
---------------------------------------------------------------
四、原因3:PUSH 模式设置了 TableLogOnInfo,不需要!
因为数据源是 DataSet,不是数据库!
---------------------------------------------------------------
五、出错:部署到其它计算机,产生问题:连接失败。错误的登录参数。
在开发机(2000)上运行,一切正常;移植到生产机(2003),就报错。错误提示:连接失败。错误的登录参数。
解决方案:
部署包少了点东西:
Crystal_Database_Access2003.msm
Crystal_Database_Access2003_chs.msm
这两个合并模块包含各种连接数据源的驱动。所以少了它,就老是提示登录失败(这种提示是不是很莫名其妙?)
---------------------------------------------------------------
六、安全之道:crystalreport 的集成认证如何与NT(2K)SERVER集成??
--------------------------------------
安全三要素:
模拟,验证,授权
--------------------------------------
如果运行 ASP.NET 程序,还需要为 ASPNET 账号——运行 ASP.NET 模拟的账号,做下述设置:
1、通过 Web 访问服务器,访问者默认“模拟”的是——Internet 来宾帐号,账号名:IUSR_计算机名;
2、“IUSR_计算机名”账号要访问 SQL SERVER,必须为该帐号建立“登录”(验证也!);
3、并授予“服务器角色”和“数据库访问许可”、“数据库角色”(授权也)!
--------------------------------------
参考:
1、匿名访问 Web 所模拟的账号
账号名:IUSR_计算机名
全名:Internet 来宾帐号
描述:匿名访问 Internet 信息服务的内置帐号
2、运行 ASP.NET 模拟的账号
账号名:ASPNET
全名:aspnet_wp account
描述:运行 ASP.NET 工作进程的账号
---------------------------------------------------------------
七、原因4:PULL 模式,水晶报表中的数据库登录问题(Windows 集成身份验证)。
1、错误提示:
“/MyWebApp”应用程序中的服务器错误。
用户 'PYPC101\ASPNET' 登录失败。
2、问题分析:
设计水晶报表时,在“数据库专家”的“连接信息”里使用了“集成安全”,即 Windows 集成身份验证。
3、解决方案:
要为 ASPNET 账号增加数据库登录和访问权限……
但这样不太适用,设计时最好使用数据库服务器的身份验证,用服务器的账号登录,比如:sa!
4、参考:三、原因2:水晶报表中的数据库登录问题。
caozhen00 2003-11-10
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/article/20%5C20463.shtm这篇文章应该可以解决你的第二个问题吧
caozhen00 2003-11-10
  • 打赏
  • 举报
回复
<appSettings>
<add key="DataSource" value="" />
<add key="UserID" value="" />
<add key="Password" value="" />
</appSettings>
这三个是连数据库的参数,还可能要加一个报表文件所在文件夹参数,看你程序怎么设计了。
我的情况是:c#调用水晶报表文件,数据源是oracle,水晶报表文件在水晶报表开发环境里开发。希望能对你有所启示。
Crystal Reports 9.2 中文版(水晶报表) 下载,,软件版本:9.2.0.448不过现已出了Crystal Reports Professional v9.2.2.634 (c) Crystal Decisions,有足够的空间就提供.这是一个很不错的报表控件,我相信很多朋友都听说过吧!Crystal Reports 用于处理数据库,帮助用户分析和解释重要信息。使用 Crystal Reports 可以方便地创建简单报表,同时它也提供了创建复杂或专用的报表所需的整套工具。 创建所能想象的任何报表 Crystal Reports几乎可以从任何数据源生成您需要的报表。内置报表专家在您生成报表和完成一般的报表任务过程中,会一步一步地指导您进行操作。报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息交流。 将报表扩展到 Web Crystal Reports 的灵活性并未停留在创建报表这一功能上 ?您可以用各种各样的格式发布报表,包括用 Microsoft 的 Word 和 Excel 发布、通过电子邮件甚至 Web 发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。 将报表并入应用程序通过将 Crystal Reports 的报表处理功能整合到自己的数据库应用程序中,应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。Crystal Reports 支持大多数流行的开发语言,可以方便地在任何应用程序中添加报表。 不论您是 IT 行业的站点管理员,还是营销推广经理,也无论您是金融业的数据库管理员还是 CEO,Crystal Reports 都堪称是一个功能强大的工具,它可以帮助每一个人分析、解释重要信息。感谢 revenant 上传!

1,979

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 其他语言讨论
社区管理员
  • 其他语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧