繁体   English   中英

如何在用于Access或DBASE文件的Crystal XI R2的C#.NET App中以编程方式设置文件位置?

[英]How do I set File locations Programatically inside a C# .NET App for Crystal XI R2 for Access or DBASE files?

我需要能够在.NET应用程序中加载的RPT文件中为Access和xBase类型设置数据源。

我已经试过了

        CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument1 = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
        reportDocument1.Load(@"C:\MyCrystal.rpt", CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy);

             string Constr = "MyConnectionString";
            // initialize an object to pull out the needed pieces for the login information.
            SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(ConStr);
            // Turn off integrated Security
            foreach (IConnectionInfo i in reportDocument1.DataSourceConnections)
            {
                i.IntegratedSecurity = false;
            }

            // Set the LogonInfo for each Data Source 
            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in reportDocument1.Database.Tables)
            {
                TableLogOnInfo logOnInfo = CrTable.LogOnInfo;
                String dbtype = logOnInfo.ConnectionInfo.Attributes.Collection.LookupNameValuePair("QE_DatabaseType").Value.ToString().Trim();
                if (dbtype.Equals("xBase"))
                {
                    NameValuePairs2 lp = logOnInfo.ConnectionInfo.LogonProperties;
                    foreach (NameValuePair2 nvp in lp)
                    {
                        if (nvp.Name.ToString().Trim().Equals("Data File"))
                          nvp.Value = @"C:\MyDbaseFile.dbf";
                    }
                    CrTable.ApplyLogOnInfo(logOnInfo);
                }
                else if (dbtype.Equals("OLE DB (ADO)"))
                {
                    bool sql = true;
                    NameValuePairs2 lp = logOnInfo.ConnectionInfo.LogonProperties;
                    NameValuePair2 prov = lp.LookupNameValuePair("Provider");
                    if (!prov.Value.ToString().ToUpper().Equals("SQLOLEDB"))
                    {
                        sql = false;
                        NameValuePair2 ds = lp.LookupNameValuePair("Data Source");
                        ds.Value = @"C:\MyAccess.mdb";
                    }
                    if (sql)
                    {
                        // Set the connection information for the table in the report.
                        logOnInfo.ConnectionInfo.UserID = sb.UserID;
                        logOnInfo.ConnectionInfo.Password = sb.Password;
                        logOnInfo.ConnectionInfo.ServerName = sb.DataSource;
                        logOnInfo.ConnectionInfo.DatabaseName = sb.InitialCatalog;
                    } 
                    CrTable.ApplyLogOnInfo(logOnInfo);
                }
          }

        reportDocument1.VerifyDatabase();
    reportDocument1.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, @"C:\MyTest.pdf");

我在VerifyDatabase()上收到一个LogOnException(或者如果它不在ExportToDisk上),我之前和之后的值都已转出,我看到了更改...但是我必须做错了什么。 请帮忙!

为此,从SAP支持人员那里获得了一些代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM