|
看来问题是出在权限的设置上。
步骤三:研究帮助,终于成功! 在帮助里我找到“设置数据库登录参数”字样,里面提供了一些后来发现是非常有用的信息: 下列示例说明如何将登录参数传递到报表的表中。该示例使用到某个安全的 SQL Server 数据库的连接。
启动一个新项目 向窗体添加一个“按钮”和四个“文本框”控件。 将“文本框”控件分别命名为:serverNameTxt、dbNameTxt、userNameTxt 和 passwordTxt。 双击“按钮”控件以指定 Click 事件的代码。根据所用语言插入适当的代码。 [C#] // 声明所需变量。 TableLogOnInfo logOnInfo = new TableLogOnInfo (); int i = 0;
// 对报表中的每个表依次循环。 for (i=0;i == Report.Database.Tables.Count - 1;i++) { // 设置当前表的连接信息。 logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text; logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text; logOnInfo.ConnectionInfo.UserID = userNameTxt.Text; logOnInfo.ConnectionInfo.Password = passwordTxt.Text; Report.Database.Tables [i].ApplyLogOnInfo (logOnInfo); } 注意 受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法,但 LogOnInfo.ServerName 和 LogOnInfo.DatabaseName 要保留为空。 于是我仿照这个样子,尝试了一下,出错提示:没有发现TableLogOnInfo 和Report。 后来我发现TableLogOnInfo 是属于CrystalDecisions.Shared 命名空间的成员。于是我添加引用: using CrystalDecisions.Shared ; 这次问题出现在Report。 Report?这是个什么东西,我查遍了所有的帮助,并没有这个函数或类! [说真的!这个问题难到了我很长的时间!一直在查找Report到底是个什么东西!水景报表公司也真是的,帮助也不写得详细一点!该打!!!] 最终我终于发现Report只是一个用户定义的对象,不是系统本身的对象。 在我困惑的时候,突然我想,为什么不看看Report后面的DataBase,这是个什么东西,终于问题解决了,在帮助里找到如下信息 ReportDocument oRpt = new ReportDocument(); Report属于DocumentCrystalDecisions.CrystalReports .Engine 类的成员。 修改代码:并添加引用 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(); oRpt.Load("c:\\inetpub\\wwwroot\\exer\\pagelet\\crystal\\cr1.rpt");//修改为你自//己的正确位置
//建立安全信息 //受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法,但 LogOnInfo.ServerName //和 LogOnInfo.DatabaseName 要保留为空 logOnInfo.ConnectionInfo.ServerName = "www";
上一篇:在 ASP.NET 中用匿名委托简单模拟 AOP 做异常和日志处理
下一篇:存储过程使用技巧
|