生成Crystal Report时需要数据库登录。 SQL Server 08,VS 08

时间:2011-07-12 08:59:50

标签: c# sql-server-2008 crystal-reports database-connection

当我将Crystal Report加载到CrystalReportViewer时,系统会提示我使用已禁用(固定)服务器名称的数据库登录。

现在,当我在我的开发机器上加载相同的报告时,它工作正常。但是当我在另一台机器上部署C#应用程序时,我总是被提示进行数据库登录。 (其中server-name是我的开发机器上使用的名称及其静态(我无法更改)

我一直想找几个星期的解决方案而且没有运气。

我使用DataTable作为报告来源:

  

MyReport.SetDataSource(MyDataTable)

我已经尝试过我搜索过的大部分在线解决方案。

我尝试在运行时传递数据库登录信息

我已经安装了SQL Native Client

我试图传递DataSet而不是DataTable

一切都没有运气

我也明白,当我加载一个包含1个数据库表的报表时,我不会被提示进行数据库登录(即我的数据库将填充一个表格形成数据库:"Select * From SomeTable"当我使用内联接查询我被提示登录

有关如何处理此问题的任何想法。

2 个答案:

答案 0 :(得分:0)

我终于解决了我正在使用

cr.SetDatabaseLogon(Username, Password, @Server, DBNAME);

我替换了该代码并传递了报告中使用的每个表的登录信息

Ť

ableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
                TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
                ConnectionInfo CInfo = new ConnectionInfo();
                //GET THE SERVER INFORMATION
                DataTable DT = b.GetServerInfo();
                CInfo.ServerName = DT.Rows[0][1].ToString();
                CInfo.DatabaseName = DT.Rows[0][2].ToString();
                CInfo.UserID = DT.Rows[0][3].ToString();
                CInfo.Password = DT.Rows[0][4].ToString();
                Tables CrTables = cr.Database.Tables;
                foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
                {
                    crtableLogoninfo = CrTable.LogOnInfo;
                    crtableLogoninfo.ConnectionInfo = CInfo;
                    CrTable.ApplyLogOnInfo(crtableLogoninfo);
                }


                frmReportViewer ff = new frmReportViewer();
                ff.crViewer.LogOnInfo = crtableLogoninfos;
                ff.crViewer.ReportSource = cr;

答案 1 :(得分:0)

首先,将对象CrystalReportViewer的属性“ReportSource”设置为Nothing:

CrystalReportViewer1.ReportSource = Nothing

以避免在设计时默认预览任何报告集。