c# - 打印使用 SQL 存储过程的 Crystal 报表时出错
问题描述
我创建了一个 Crystal Report,它使用 SQL Server 存储过程作为数据源。存储过程有一个参数。当下面的代码运行时,我在 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();
解决方案
以下是您可能已经尝试过或尚未尝试过的几件事......
为了将问题隔离到 Crystal Reports,您是否尝试过编写一个函数来通过直接 SQL 连接执行该过程?这将允许您测试您的凭据和 SQL 权限。
我在您的连接设置中没有看到任何关于集成安全的信息,您可能需要仔细检查一下。由于您传递的是用户名/密码,我假设您没有使用 Windows 身份验证,可能需要 Integrated Security = false
您的报告是否有任何子报告?如果是这样,您将需要像处理表一样设置连接信息。
检查您的数据源是否与数据库不同步。要从报表设计器执行此操作,请选择数据库 -> 验证数据库。
如果这些选项不起作用,请告诉我,我可以进行更多挖掘。一旦您摆脱了“陷阱”,Crystal 报告就很棒。
推荐阅读
- reactjs - 使用谷歌翻译 api 对翻译单词做出反应的问题
- python - pandas 数据透视表:通过 aggfunc 计算加权平均值
- flutter - 如何在启动时调用内部异步函数并根据其结果显示特定屏幕?
- c++ - 如何获取类向量的输入?
- html - 为什么对象或 iframe 中的链接(我都尝试过)开始在新窗口中打开
- python - 根据来自不同数组的条件交换 2 个 numpy 数组
- sql-server - 存储过程总是返回 1 而不是变量的计算值
- java - Android 应用程序 - 如何将对象定位到屏幕的顶部和底部?
- python - 打印功能不运行
- c# - .NET Core Web API 上的插件架构在此平台上不支持 Microsoft.Data.SqlClient