更改数据库位置会删除所有者架构

时间:2012-11-28 22:05:42

标签: c# .net visual-studio-2010 crystal-reports

我们在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但是程序锁定了。所以不确定该怎么做。

2 个答案:

答案 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);

其中documentCrystalDecisions.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;

    }

我错误地设置了位置。谢谢你的帮助!