我创建了一个使用SQL Server存储过程作为数据源的Crystal Report。该存储过程具有一个参数。当下面的代码运行时,在obj.PrintToPrinter行中出现“数据库登录失败”。
如果我从报表中删除存储过程,并用存储过程中使用的相同表替换它,并使用相同的参数,则不会出错。报告打印没有问题!
任何帮助将不胜感激,我真的很想在我们的报告中使用存储过程。谢谢!
ReportDocument obj = new ReportDocument();
string m_rptname = "C:\\Reports\\MyReport.rpt";
obj.Load(m_rptname);
obj.SetParameterValue(0, "123456");
foreach (Table tbl in obj.Database.Tables)
{
TableLogOnInfo tli = tbl.LogOnInfo;
tli.ConnectionInfo.ServerName = "myServer";
tli.ConnectionInfo.UserID = "myUser";
tli.ConnectionInfo.Password = "myPass";
tli.ConnectionInfo.DatabaseName = "myDB";
tbl.ApplyLogOnInfo(tli);
}
//The line below is where the error happens for stored proc only
obj.PrintToPrinter(2, false, 0, 0);
obj.Close();
obj.Dispose();
答案 0 :(得分:1)
以下是您可能已经尝试过的几件事...
为了将问题隔离到Crystal Reports,您是否尝试编写函数以通过直接SQL连接执行该过程?这将允许您测试凭据和SQL权限。
我在您的连接设置中没有看到有关Integrated Security的任何内容,您可能需要仔细检查。由于您正在传递用户名/密码,因此我假设您未使用Windows身份验证,可能需要集成安全性= false
您的报告是否有任何子报告?如果是这样,您将需要像处理表一样设置连接信息。
检查以查看您的数据源是否与数据库不同步。为此,请从报表设计器中选择“数据库”->“验证数据库”。
如果这些选项不起作用,请告诉我,我可以再进行一些挖掘。一旦您摆脱了“陷阱”,Crystal报表就很棒。