我也发现类似的问题。
private void BindReport(){
string strProvider = "Server=(local);DataBase=NorthWind;UID=sa;PWD=";
CrystalReport1 oCR= new CrystalReport1();///C:\Inetpub\wwwroot\WebReport1\WebForm1.aspx.cs(52): 找不到类型或命名空间名称“CrystalReport1”(是否缺少 using 指令或程序集引用?)
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Customers";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"Coustomers");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
是什么原因呢?
private void BindReport(){
string strProvider = "Server=(local);DataBase=NorthWind;UID=sa;PWD=";
CrystalReport1 oCR= new CrystalReport1();///C:\Inetpub\wwwroot\WebReport1\WebForm1.aspx.cs(52): 找不到类型或命名空间名称“CrystalReport1”(是否缺少 using 指令或程序集引用?)
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Customers";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"Coustomers");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
是什么原因呢?
if(this.ZXRadioButton.Checked)
{
sqlStr="BEGIN SP_REPORT_HWXSZBZJ(to_date('"+this.FromDateTextBox.Text+
"','yyyy-mm-dd'),to_date('"+this.ToDateTextBox.Text+"','yyyy-mm-dd'), '"+this.YearTextBox.Text+"' ); END;";
}
else if(this.CSRadioButton.Checked)
{
sqlStr="BEGIN SP_REPORT_HWXSZBCS(to_date('"+this.FromDateTextBox.Text+
"','yyyy-mm-dd'),to_date('"+this.ToDateTextBox.Text+"','yyyy-mm-dd'), '"+this.YearTextBox.Text+"' ); END;";
}OleDbConnection connO=new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectStringOracle"].ToString());
OleDbCommand cmdO=new OleDbCommand(sqlStr,connO);connO.Open();
try
{
cmdO.ExecuteNonQuery();
if(this.ZXRadioButton.Checked)
{
sqlStr="SELECT BB_HWXSZBZJ.*,TRUNC(SYSDATE,'DD') TJRQ FROM BB_HWXSZBZJ ORDER BY SERIAL,CXFL";
}
else if(this.CSRadioButton.Checked)
{
sqlStr="SELECT BB_HWXSZBCS.*,TRUNC(SYSDATE,'DD') TJRQ FROM BB_HWXSZBCS ORDER BY SERIAL,CXFL";
}
cmdO.CommandText=sqlStr; OleDbDataAdapter DA=new OleDbDataAdapter(cmdO);
DataSet DS=new DataSet();
DA.Fill(DS,"bb_xsqkzbzj"); CRpt_XSQKZBZJ CRRpt=new CRpt_XSQKZBZJ();//CRpt_XSQKZBZJ是我的报表 CRRpt.SetDataSource(DS);
//若没有这一段则报告登录错误////////////////////////////////////
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
logOnInfo.ConnectionInfo.ServerName = "SrvName";
logOnInfo.ConnectionInfo.UserID = "UserName";
logOnInfo.ConnectionInfo.Password = "Password"; for (int i=0;i <= CRRpt.Database.Tables.Count - 1;i++)
{
CRRpt.Database.Tables [i].ApplyLogOnInfo(logOnInfo);
}
//若没有这一段则报告登录错误////////////////////////////////////
this.CrystalReportViewer1.ReportSource=CRRpt;
}
finally
{
connO.Close();
}
指定水晶表的数据源是存储过程,
在程序中向水晶表传参数,让水晶表调用存储过程,
DS.Tables[0].Rows.Count是0吗? 有数据的。
sqlserver试过是可以的,因为sqlserver储存过程可返回结果集,但oracle则不能,怎样调完过程后再返回结果集呢?谢谢!
设计时指定*.XSD为报表数据源
http://expert.csdn.net/Expert/topic/2174/2174437.xml?temp=.8575251
谢谢你的回答。
不过我的问题不是实现动态数据的报表,而是如何让水晶报表运行存储过程,然后从临时表中取数(oracle的临时表,不同session不能共享数据)。或是运行存储过程,然后让水晶报表使用同一个connection取数据。
请问能够如何实现呢?
谢谢你的回复。
oracle的存储过程不能返回结果集,你说的方法适用于sqlserver,但oracle则不行。
自己再up
先试试。
我试过在水晶报表中运行返回游标的ORACLE存储过程,因不知道如何让水晶报表接受游表输出参数,所以直接调用,如下
DECLARE
IN_ACUR PKG_TOOLS.ACUR;
BEGIN
SP_REPORT_HWXSZBZJ_CRPT (to_date('20030901','yyyymmdd'),to_date('20030908','yyyymmdd'), '2003', IN_ACUR );
END; 但水晶报表报告:不支持!不知道如何让水晶报表接受ORACLE存储过程的游标输出参数呢?谢谢你提供的链接,让我又学到了东东。
只想问问
怎样能将数据通过DataSet传给水晶报表?
有没有谁真的成功地通过DataSet将数据传给水晶报表。这样来测试:
报表中的查询为select * from atable;
生成DataSet的查询为 select * from atable where acolumn like '%condition%' 过滤一些纪录。
看看实际显示的结果是否是第二个查询的结果。我试过了,无论如何都会是第一个查询的结果。请成功过的兄弟姐妹帮帮我,谢谢了!
if > 0
建议你改成CRRpt.SetDataSource(DS.Tables["bb_xsqkzbzj"]);
运行过程,生成结果,填充数据集,绑定报表就ok了。若有不明白的,请参看这个例子:http://www.yesky.com/20020618/1616438.shtml结贴