我们在8.0.1.0中创建了数百个报告(我知道它们已经过时了)。
我们创建了一个Visual Studio 2010 C#应用程序来运行这些报告。这是一个Windows应用程序。使用Web App遇到了一些麻烦。
报告全部保存在PROD环境下。
我们正在TEST环境中工作。
我们正在使用Oracle环境,所有报告都使用Oracle Server连接。
当我们通过C#运行报告时,我们继续将所有数据库位置更改为TEST环境。发生这种情况时,将删除“所有者”(架构)信息。报告失败,出现942错误。
现在,如果我们不更改数据库,请将其保留为PROD,一切正常。似乎通过更改数据库,架构信息被删除。
任何想法。我一直在寻找并找不到解决方案。
代码片段:
connectionInfo.DatabaseName = "";
connectionInfo.ServerName = <SERVER>;
connectionInfo.UserID = <USER>;
connectionInfo.Password = <PWORD>;
foreach (Table crTable in crTables)
{
crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = connectionInfo;
crTable.ApplyLogOnInfo(crTableLogOnInfo);
// if you wish to change the schema name as well, you will need to set Location property as follows:
//crTable.Location = "<SCHEMA>." + crTable.Name;
}
我试过设置crTable.Location但是程序锁定了。所以不确定该怎么做。
答案 0 :(得分:1)
过去,我们通过以下方式成功更改了连接参数:
CrystalDecisions.Shared.TableLogOnInfo info = document.Database.Tables[iTable].LogOnInfo.Clone() as CrystalDecisions.Shared.TableLogOnInfo;
info.ConnectionInfo.ServerName = <SERVER>;
info.ConnectionInfo.DatabaseName = "";
info.ConnectionInfo.UserID = <USER>;
info.ConnectionInfo.Password = <PASSWORD>;
document.Database.Tables[iTable].ApplyLogOnInfo(info);
其中document
为CrystalDecisions.CrystalReports.Engine.ReportDocument
。
答案 1 :(得分:1)
通过这样做解决了这个问题:
connectionInfo.DatabaseName = "";
connectionInfo.ServerName = <SERVER>;
connectionInfo.UserID = <USER>;
connectionInfo.Password = <PWORD>;
foreach (Table crTable in crTables)
{
crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = connectionInfo;
crTable.ApplyLogOnInfo(crTableLogOnInfo);
// if you wish to change the schema name as well, you will need to set Location property as follows:
//crTable.Location = "<SCHEMA>." + crTable.Name;
crTable.Location = "<SCHEMA>." + crTable.LogOnInfo.TableName;
}
我错误地设置了位置。谢谢你的帮助!