TableLogOnInfo LogOnInfo= new TableLogOnInfo ();
LogOnInfo.ConnectionInfo.ServerName="chenjinhua";
LogOnInfo.ConnectionInfo.DatabaseName="CheWu";
LogOnInfo.ConnectionInfo.UserID="sa";
LogOnInfo.ConnectionInfo.Password="master";
ReportDocument Report= new ReportDocument ();
Report.Load("D://inetpub//wwwroot//test//CrystalReport1.rpt");
Report.Database.Tables[0].ApplyLogOnInfo (LogOnInfo);
//Report.SetDataSource("dataSet11");
//CrystalReportViewer1.ReportSource= Report;
myConnection.Open ();
DataSet ds =new DataSet ();
string strSel = "Select * from ticket";
SqlDataAdapter MyAdapter=new SqlDataAdapter (strSel,myConnection);
MyAdapter.Fill(ds,"vSpeciality");
Report.SetDataSource(ds);
CrystalReportViewer1.ReportSource =Report;
myConnection.Close();
以上是我的代码。
以下是报错信息:
“/Test”应用程序中的服务器错误。
--------------------------------------------------------------------------------
登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[LogOnException: 登录失败。]
.F(String , EngineExceptionErrorID
)
.A(Int16 , Int32 )
.@(Int16 )
CrystalDecisions.CrystalReports.Engine.FormatEngine.GetPage(PageRequestContext reqContext)
CrystalDecisions.ReportSource.LocalReportSourceBase.GetPage(PageRequestContext pageReqContext)
CrystalDecisions.Web.ReportAgent.u(Boolean N)
CrystalDecisions.Web.CrystalReportViewer.OnPreRender(EventArgs e)
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Page.ProcessRequestMain()
LogOnInfo.ConnectionInfo.ServerName="chenjinhua";
LogOnInfo.ConnectionInfo.DatabaseName="CheWu";
LogOnInfo.ConnectionInfo.UserID="sa";
LogOnInfo.ConnectionInfo.Password="master";
ReportDocument Report= new ReportDocument ();
Report.Load("D://inetpub//wwwroot//test//CrystalReport1.rpt");
Report.Database.Tables[0].ApplyLogOnInfo (LogOnInfo);
//Report.SetDataSource("dataSet11");
//CrystalReportViewer1.ReportSource= Report;
myConnection.Open ();
DataSet ds =new DataSet ();
string strSel = "Select * from ticket";
SqlDataAdapter MyAdapter=new SqlDataAdapter (strSel,myConnection);
MyAdapter.Fill(ds,"vSpeciality");
Report.SetDataSource(ds);
CrystalReportViewer1.ReportSource =Report;
myConnection.Close();
以上是我的代码。
以下是报错信息:
“/Test”应用程序中的服务器错误。
--------------------------------------------------------------------------------
登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[LogOnException: 登录失败。]
.F(String , EngineExceptionErrorID
)
.A(Int16 , Int32 )
.@(Int16 )
CrystalDecisions.CrystalReports.Engine.FormatEngine.GetPage(PageRequestContext reqContext)
CrystalDecisions.ReportSource.LocalReportSourceBase.GetPage(PageRequestContext pageReqContext)
CrystalDecisions.Web.ReportAgent.u(Boolean N)
CrystalDecisions.Web.CrystalReportViewer.OnPreRender(EventArgs e)
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Page.ProcessRequestMain()
1 楼
CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
---------------------------------------------------------------
在报表的cs文件中,加上数据库连接。
---------------------------------------------------------------
1.TableLogonInfo
.使用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.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表
代码放在 Page_load 事件里!
试试 info.ConnectionInfo.ServerName = "Localhost"
用户名和密码的正确性再确定一下!
——————————————————————————————————————
调试成功后,可以考虑:
将“数据库连接信息”存放在 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();
}
---------------------------------------------------------------
在报表的cs文件中,加上数据库连接。
---------------------------------------------------------------
1.TableLogonInfo
.使用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.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表
代码放在 Page_load 事件里!
试试 info.ConnectionInfo.ServerName = "Localhost"
用户名和密码的正确性再确定一下!
——————————————————————————————————————
调试成功后,可以考虑:
将“数据库连接信息”存放在 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();
}
2 楼
大家一起到这里支持一下!!!
http://expert.csdn.net/Expert/TopicView1.asp?id=2291055
CSDN 开个 Crystal Report 版吧!!!&&&我与水晶报表……
haibodotnet 海波.NET
http://expert.csdn.net/Expert/TopicView1.asp?id=2291055
CSDN 开个 Crystal Report 版吧!!!&&&我与水晶报表……
haibodotnet 海波.NET
3 楼
海波同志,你贴的我都看过呀,可是你没从根本上解决我的问题呀
4 楼
有没有谁知道怎么解决呀?
MVP呢,你们去哪了?
MVP呢,你们去哪了?
5 楼
大家一起来看啊,这么登录失败者,高手们就忍心看着不管吗?
http://expert.csdn.net/Expert/topic/2325/2325865.xml?temp=.1368372
http://expert.csdn.net/Expert/topic/2325/2325865.xml?temp=.1368372
6 楼
还有可能是 NTFS 文件夹权限的问题!
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、添加当前用户,比如 Administrator,,权限“写入”;
2、添加用户 ASPNET,权限“写入”!
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、添加当前用户,比如 Administrator,,权限“写入”;
2、添加用户 ASPNET,权限“写入”!
7 楼
问题:
CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
---------------------------------------------------------------
原因一: NTFS 文件夹权限的问题!
文件夹:
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、添加当前用户,比如 Administrator,,权限“写入”;
2、添加用户 ASPNET,权限“写入”!
---------------------------------------------------------------
原因二:数据库登录问题
在报表的cs文件中,加上数据库连接。
1.TableLogonInfo
.使用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.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表
代码放在 Page_load 事件里!
试试 info.ConnectionInfo.ServerName = "Localhost"
用户名和密码的正确性再确定一下!
——————————————————————————————————————
调试成功后,可以考虑:
将“数据库连接信息”存放在 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();
}
CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。
---------------------------------------------------------------
原因一: NTFS 文件夹权限的问题!
文件夹:
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、添加当前用户,比如 Administrator,,权限“写入”;
2、添加用户 ASPNET,权限“写入”!
---------------------------------------------------------------
原因二:数据库登录问题
在报表的cs文件中,加上数据库连接。
1.TableLogonInfo
.使用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.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表
代码放在 Page_load 事件里!
试试 info.ConnectionInfo.ServerName = "Localhost"
用户名和密码的正确性再确定一下!
——————————————————————————————————————
调试成功后,可以考虑:
将“数据库连接信息”存放在 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();
}
8 楼
To:岛城浪子
你是怎么解决的?能否告诉我呢?
你是怎么解决的?能否告诉我呢?
9 楼
Dim oRpt = New ReportDocument()
oRpt.Load("d:/hl/Cr2.rpt")
Dim logoninfo As TableLogOnInfo = New TableLogOnInfo()
With logoninfo.ConnectionInfo
.ServerName = "pc1"
.DatabaseName = "hl"
.UserID = "southdoor"
.Password = "0"
End With
oRpt.Database.Tables(0).ApplyLogOnInfo(logoninfo)
CrystalReportViewer1.ReportSource = oRpt
向导生成cr2.rpt,数据库连接是ole db连接后,就可以了。
但我的oRpt.SetDataSource(DataSet11.hl)方法还是登录失败,真他妈郁闷!
海波波说的方法我都看了,还是通不过。
oRpt.Load("d:/hl/Cr2.rpt")
Dim logoninfo As TableLogOnInfo = New TableLogOnInfo()
With logoninfo.ConnectionInfo
.ServerName = "pc1"
.DatabaseName = "hl"
.UserID = "southdoor"
.Password = "0"
End With
oRpt.Database.Tables(0).ApplyLogOnInfo(logoninfo)
CrystalReportViewer1.ReportSource = oRpt
向导生成cr2.rpt,数据库连接是ole db连接后,就可以了。
但我的oRpt.SetDataSource(DataSet11.hl)方法还是登录失败,真他妈郁闷!
海波波说的方法我都看了,还是通不过。
10 楼
请问岛城浪子:
数据库连接不用ole db,用ADO.NET好象不行哦
数据库连接不用ole db,用ADO.NET好象不行哦
11 楼
我的也是登录失败,郁闷!!!
12 楼
我的也是!水晶报表到底行不行呀
13 楼
CrystalReportViewer1.ReportSource = "D://inetpub//wwwroot//test//CrystalReport1.rpt";
DataBind();
DataBind();
14 楼
水晶报表,好用得狠啊……
细心点……
先试试上面最简单的 PULL 模式……
建立自信……
细心点……
先试试上面最简单的 PULL 模式……
建立自信……
15 楼
to:海波
ADO.NET好象不能连结到SQL SERVER哦,是吗?
ADO.NET好象不能连结到SQL SERVER哦,是吗?
16 楼
to:海波
好象你有一个水晶报表的论坛,能把地址告诉我吗?
好象你有一个水晶报表的论坛,能把地址告诉我吗?
17 楼
想了解更多水晶报表的知识和技巧,请到
NET专栏 -> 水晶报表专栏
http://218.56.11.178:8009/
jpyc(九品御厨-进军嵌入式)
NET专栏 -> 水晶报表专栏
http://218.56.11.178:8009/
jpyc(九品御厨-进军嵌入式)
18 楼
谢谢海波!!!
我还想问海波,以存儲過程為數據源建立報表时,存储过程的参数如何处理?
我还想问海波,以存儲過程為數據源建立報表时,存储过程的参数如何处理?
19 楼
海波.NET
问题:
以存储过程为数据源建立报表时,存储过程的参数如何处理?
——————————————————————————————————————
解决方案:
1、设计报表时:
(1)在“数据库连接向导”里选择存储过程,会提示你输入“参数”;
(2)输入数值后,就可以可视化设计报表了;
(3)而且会根据“参数”自动生成相应的“参数字段”。
2、编程:
(1)PUSH 模式:调用存储过程生成 DataSet,直接绑定;
(2)PULL 模式:设置 CrystalReportViewer1.ParameterFieldInfo,即参数字段。
3、参考:
参数字段运行时自定义
可支持用户在 Crystal 报表中通过参数进行输入。这种参数有多种用途。例如:
使参数基于数据库字段并允许用户指定该字段的值,以便对报表中的数据进行筛选。
使用参数字段将条件格式应用于报表。
使用参数字段来定义排序顺序。
下列示例说明如何在运行时通过代码设置参数字段值。此例解释了如何设置两个不同的参数:第一个是多值离散参数,第二个是区域值参数。
在运行时修改参数字段
[Visual Basic]
' 声明将参数传递给
'查看器控件所需的变量。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue()
Dim rangeVal As New ParameterRangeValue()
' 第一个参数是具有多个值的离散参数。
' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名"
' 设置第一个离散值并将其传递给该参数
discreteVal.Value = "AIC Childrens"
paramField.CurrentValues.Add(discreteVal)
' 设置第二个离散值并将其传递给该参数。
' discreteVal 变量被设置为新值,这样,以前的设置
'就不会被覆盖。
discreteVal = New ParameterDiscreteValue()
discreteVal.Value = "Aruba Sport"
paramField.CurrentValues.Add(discreteVal)
' 将该参数添加到参数字段集合。
paramFields.Add(paramField)
' 第二个参数为区域值。paramField 变量
'被设置为新值,这样,以前的设置就不会被覆盖。
paramField = New ParameterField()
' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID"
' 设置区域的开始值和结束值并将区域传递给该参数。
rangeVal.StartValue = 42
rangeVal.EndValue = 72
paramField.CurrentValues.Add(rangeVal)
' 将第二个参数添加到参数字段集合。
paramFields.Add(paramField)
' 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields
crystalReportViewer1.ReportSource = "c:/reports/my report.rpt"
[C#]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;
[C++]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields* paramFields = new ParameterFields ();
ParameterField* paramField = new ParameterField ();
ParameterDiscreteValue* discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue* rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField->ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
String* val = "AIC Childrens";
discreteVal->Value = val;
paramField->CurrentValues->Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
val = "Aruba Sport";
discreteVal->Value = val;
paramField->CurrentValues->Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields->Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField->ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal->StartValue = __box(42);
rangeVal->EndValue = __box(72);
paramField->CurrentValues->Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields->Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1->ParameterFieldInfo = paramFields;
crystalReportViewer1->ExportReport();
问题:
以存储过程为数据源建立报表时,存储过程的参数如何处理?
——————————————————————————————————————
解决方案:
1、设计报表时:
(1)在“数据库连接向导”里选择存储过程,会提示你输入“参数”;
(2)输入数值后,就可以可视化设计报表了;
(3)而且会根据“参数”自动生成相应的“参数字段”。
2、编程:
(1)PUSH 模式:调用存储过程生成 DataSet,直接绑定;
(2)PULL 模式:设置 CrystalReportViewer1.ParameterFieldInfo,即参数字段。
3、参考:
参数字段运行时自定义
可支持用户在 Crystal 报表中通过参数进行输入。这种参数有多种用途。例如:
使参数基于数据库字段并允许用户指定该字段的值,以便对报表中的数据进行筛选。
使用参数字段将条件格式应用于报表。
使用参数字段来定义排序顺序。
下列示例说明如何在运行时通过代码设置参数字段值。此例解释了如何设置两个不同的参数:第一个是多值离散参数,第二个是区域值参数。
在运行时修改参数字段
[Visual Basic]
' 声明将参数传递给
'查看器控件所需的变量。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue()
Dim rangeVal As New ParameterRangeValue()
' 第一个参数是具有多个值的离散参数。
' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名"
' 设置第一个离散值并将其传递给该参数
discreteVal.Value = "AIC Childrens"
paramField.CurrentValues.Add(discreteVal)
' 设置第二个离散值并将其传递给该参数。
' discreteVal 变量被设置为新值,这样,以前的设置
'就不会被覆盖。
discreteVal = New ParameterDiscreteValue()
discreteVal.Value = "Aruba Sport"
paramField.CurrentValues.Add(discreteVal)
' 将该参数添加到参数字段集合。
paramFields.Add(paramField)
' 第二个参数为区域值。paramField 变量
'被设置为新值,这样,以前的设置就不会被覆盖。
paramField = New ParameterField()
' 设置参数字段的名称,它必须
'和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID"
' 设置区域的开始值和结束值并将区域传递给该参数。
rangeVal.StartValue = 42
rangeVal.EndValue = 72
paramField.CurrentValues.Add(rangeVal)
' 将第二个参数添加到参数字段集合。
paramFields.Add(paramField)
' 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields
crystalReportViewer1.ReportSource = "c:/reports/my report.rpt"
[C#]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;
[C++]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields* paramFields = new ParameterFields ();
ParameterField* paramField = new ParameterField ();
ParameterDiscreteValue* discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue* rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField->ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
String* val = "AIC Childrens";
discreteVal->Value = val;
paramField->CurrentValues->Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
val = "Aruba Sport";
discreteVal->Value = val;
paramField->CurrentValues->Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields->Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField->ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal->StartValue = __box(42);
rangeVal->EndValue = __box(72);
paramField->CurrentValues->Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields->Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1->ParameterFieldInfo = paramFields;
crystalReportViewer1->ExportReport();
20 楼
彻底解决 CrystalReports 登录失败问题(海波.NET,更新:2003-10-14)
问题:
CrystalReports 登录失败
---------------------------------------------------------------
原因一: NTFS 文件夹权限的问题!
文件夹:
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、添加当前用户,比如 Administrator,,权限“写入”;
2、为用户 ASPNET、SYSTEM、匿名用户(通常为 IUSR_MACHINENAME)、经过身份验证的请求用户添加“写入”权限!
---------------------------------------------------------------
原因二:数据库登录问题
在报表的cs文件中,加上数据库连接。
1.TableLogonInfo
.使用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.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表
代码放在 Page_load 事件里!
试试 info.ConnectionInfo.ServerName = "Localhost"
用户名和密码的正确性再确定一下!
——————————————————————————————————————
调试成功后,可以考虑:
将“数据库连接信息”存放在 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();
}
——————————————————————————————————————
附件:
海波.NET
问题:
安全之道: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 工作进程的账号
问题:
CrystalReports 登录失败
---------------------------------------------------------------
原因一: NTFS 文件夹权限的问题!
文件夹:
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、添加当前用户,比如 Administrator,,权限“写入”;
2、为用户 ASPNET、SYSTEM、匿名用户(通常为 IUSR_MACHINENAME)、经过身份验证的请求用户添加“写入”权限!
---------------------------------------------------------------
原因二:数据库登录问题
在报表的cs文件中,加上数据库连接。
1.TableLogonInfo
.使用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.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表
代码放在 Page_load 事件里!
试试 info.ConnectionInfo.ServerName = "Localhost"
用户名和密码的正确性再确定一下!
——————————————————————————————————————
调试成功后,可以考虑:
将“数据库连接信息”存放在 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();
}
——————————————————————————————————————
附件:
海波.NET
问题:
安全之道: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 工作进程的账号
21 楼
海波:
我在设计报表的时候设计了参数,并给我值,程序我已经按你说的做了,但有如下错误:
丢失参数字段当前值。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.ParameterFieldCurrentValueException: 丢失参数字段当前值。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[ParameterFieldCurrentValueException: 丢失参数字段当前值。]
.F(String , EngineExceptionErrorID
)
.B(String , Int32 )
CrystalDecisions.CrystalReports.Engine.FormatEngine.internalSetReportInfo(RequestContext reqContext)
CrystalDecisions.CrystalReports.Engine.FormatEngine.internalGetViewContext(ReportPageRequestContext reqContext, * viewContext)
CrystalDecisions.CrystalReports.Engine.FormatEngine.GetPage(PageRequestContext reqContext)
CrystalDecisions.ReportSource.LocalReportSourceBase.GetPage(PageRequestContext pageReqContext)
CrystalDecisions.Web.ReportAgent.u(Boolean N)
CrystalDecisions.Web.CrystalReportViewer.OnPreRender(EventArgs e)
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Page.ProcessRequestMain()
我在设计报表的时候设计了参数,并给我值,程序我已经按你说的做了,但有如下错误:
丢失参数字段当前值。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.ParameterFieldCurrentValueException: 丢失参数字段当前值。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
堆栈跟踪:
[ParameterFieldCurrentValueException: 丢失参数字段当前值。]
.F(String , EngineExceptionErrorID
)
.B(String , Int32 )
CrystalDecisions.CrystalReports.Engine.FormatEngine.internalSetReportInfo(RequestContext reqContext)
CrystalDecisions.CrystalReports.Engine.FormatEngine.internalGetViewContext(ReportPageRequestContext reqContext, * viewContext)
CrystalDecisions.CrystalReports.Engine.FormatEngine.GetPage(PageRequestContext reqContext)
CrystalDecisions.ReportSource.LocalReportSourceBase.GetPage(PageRequestContext pageReqContext)
CrystalDecisions.Web.ReportAgent.u(Boolean N)
CrystalDecisions.Web.CrystalReportViewer.OnPreRender(EventArgs e)
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Control.PreRenderRecursiveInternal()
System.Web.UI.Page.ProcessRequestMain()
22 楼
Crystal Reports 9 最新补丁下载(搜集:海波.NET)
(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)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
23 楼
打了补丁,还是不行!
24 楼
贴出源代码,看看……
25 楼
Current <错误: 发生 {CrystalDecisions.CrystalReports.Engine.InvalidArgumentException} 类型的异常>System.Object
加了参数就有以上错误,不加就没有
加了参数就有以上错误,不加就没有
26 楼
以下是源代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
TableLogOnInfo LogOnInfo= new TableLogOnInfo ();
LogOnInfo.ConnectionInfo.ServerName="chenjinhua";
LogOnInfo.ConnectionInfo.DatabaseName="CheWu";
LogOnInfo.ConnectionInfo.UserID="sa";
LogOnInfo.ConnectionInfo.Password="master";
ReportDocument Report= new ReportDocument ();
Report.Load("D://inetpub//wwwroot//test//CrystalReport4.rpt");
for (int i=0;i == Report.Database.Tables.Count - 1;i++)
{
Report.Database.Tables[i].ApplyLogOnInfo (LogOnInfo);
}
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
//ParameterRangeValue rangeVal = new ParameterRangeValue ();
paramField.ParameterFieldName = "id";
discreteVal.Value =1;
paramField.CurrentValues.Add (discreteVal);
paramFields.Add (paramField);
paramField= new ParameterField();
paramField.ParameterFieldName = "seatNumber";
discreteVal=new ParameterDiscreteValue();
discreteVal.Value =3;
paramField.CurrentValues.Add (discreteVal);
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ReportSource =Report;
this.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
TableLogOnInfo LogOnInfo= new TableLogOnInfo ();
LogOnInfo.ConnectionInfo.ServerName="chenjinhua";
LogOnInfo.ConnectionInfo.DatabaseName="CheWu";
LogOnInfo.ConnectionInfo.UserID="sa";
LogOnInfo.ConnectionInfo.Password="master";
ReportDocument Report= new ReportDocument ();
Report.Load("D://inetpub//wwwroot//test//CrystalReport4.rpt");
for (int i=0;i == Report.Database.Tables.Count - 1;i++)
{
Report.Database.Tables[i].ApplyLogOnInfo (LogOnInfo);
}
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
//ParameterRangeValue rangeVal = new ParameterRangeValue ();
paramField.ParameterFieldName = "id";
discreteVal.Value =1;
paramField.CurrentValues.Add (discreteVal);
paramFields.Add (paramField);
paramField= new ParameterField();
paramField.ParameterFieldName = "seatNumber";
discreteVal=new ParameterDiscreteValue();
discreteVal.Value =3;
paramField.CurrentValues.Add (discreteVal);
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ReportSource =Report;
this.DataBind();
}