首先,新建一个水晶报表的文件,这个时候要给这个报表文件绑定一个oracle数据源,
选择右侧菜单的这个东西,选择“数据库专家”,打开之后是这么一个界面:
选择建立新连接:
这个地方最关键,也是我为什么要写这篇日志的原因。这里很坑,就是这里的服务一定要是Oracle安装程序里的tnsnames.ora文件配置的节点的名称,切记!
例如这个:
ALi=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=192.168.1.1)
(PORT=1521)
)
(CONNECT_DATA=
(SERVICE_NAME=mir)
)
)
这里的服务就要填写ALi。然后再输入相应的用户名和密码就OK了。
第二章:参数
首先,水晶报表里面和RDLC一样有参数字段,然后水晶报表的数据源里面写自定义SQL的时候也是可以定义参数字段的。OK,那么问题来了,我们从.Net程序里传入的参数字段是什么呢?
首先,你在数据源自定义的sql里面新增的参数,会自动在报表参数字段中相应的新增一个参数。然后你也可以自己在参数字段中新增参数。跟数据源绑定的参数最下角是有一个小标识的:
最后,上完整的.Net端的代码:
//实例化报表 ReportDocument rpt = new ReportDocument(); rpt.Load(Application.StartupPath + "\Pan.rpt"); //注册数据源,如果不注册则打开报表的时候会提示登录 TableLogOnInfo log = new TableLogOnInfo(); log.ConnectionInfo.ServerName = "4160"; log.ConnectionInfo.DatabaseName = "orcl"; log.ConnectionInfo.UserID = "UserId"; log.ConnectionInfo.Password = "XXXX"; rpt.Database.Tables[0].ApplyLogOnInfo(log); //为报表控件绑定报表 this.crystalReportViewer1.ReportSource = rpt; //设置参数,这里需要三个变量,对应的报表中每一个参数都可以传入多个值 ParameterFields t = new ParameterFields(); ParameterField paramField = new ParameterField(); ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); ParameterValues paramValues = new ParameterValues(); paramField.ParameterFieldName = "ProductId"; paramDiscreteValue.Value = "PA01010020"; paramValues.Add(paramDiscreteValue); paramField.CurrentValues = paramValues; t.Add(paramField); this.crystalReportViewer1.ParameterFieldInfo = t;