转换Crystalreport's Provider从'SQLNCLI'& # 39; SQLO

本文关键字:SQLO SQLNCLI Crystalreport 转换 Provider | 更新日期: 2023-09-27 18:07:29

是否可以通过代码"c#"将crystalreport的Provider从'SQLNCLI'转换为'SQLOLEDB'

我已经尝试了下面的代码,但没有工作。

TableLogOnInfo logoninfo;
            foreach (CrystalDecisions.CrystalReports.Engine.Table tbcurrent in rptH.Database.Tables)
            {
                logoninfo = new TableLogOnInfo();
                logoninfo.ConnectionInfo.DatabaseName = connectionInfo.DatabaseName;
                logoninfo.ConnectionInfo.ServerName = connectionInfo.ServerName;
                logoninfo.ConnectionInfo.UserID = connectionInfo.UserID;
                logoninfo.ConnectionInfo.Password = connectionInfo.Password;
                tbcurrent.ApplyLogOnInfo(logoninfo);
            }
            rptH.SetDatabaseLogon(connectionInfo.UserID, connectionInfo.Password, connectionInfo.ServerName, connectionInfo.DatabaseName, true);
            for (int i = 0; i < rptH.Subreports.Count; i++)
            {
                foreach (CrystalDecisions.CrystalReports.Engine.Table tbcurrent in rptH.Subreports[i].Database.Tables)
                {
                    logoninfo = new TableLogOnInfo();
                    logoninfo.ConnectionInfo.DatabaseName = connectionInfo.DatabaseName;
                    logoninfo.ConnectionInfo.ServerName = connectionInfo.ServerName;
                    logoninfo.ConnectionInfo.UserID = connectionInfo.UserID;
                    logoninfo.ConnectionInfo.Password = connectionInfo.Password;
                    tbcurrent.ApplyLogOnInfo(logoninfo);
                }
                rptH.Subreports[i].SetDatabaseLogon(connectionInfo.UserID, connectionInfo.Password, connectionInfo.ServerName, connectionInfo.DatabaseName, true);
            }

转换Crystalreport's Provider从'SQLNCLI'& # 39; SQLO

我不确定这是否可以做到,因为连接类型似乎存储在.rpt文件中。但是,您可以尝试使用本机。net API将数据库选择检索到System.Data.DataSet/System.Data.DataTable实例中,并调用Table.SetDataSource()设置为表数据源,因此您不需要关心TableLogOnInfo对象,但请确保方案与报表的方案匹配。

下面的示例代码来自Crystal Reports .NET API指南:

private void SetDataSource
   (string conn, string query, DataSet dataSet)
{
   OleDbConnection oleConn = new OleDbConnection(conn);
   OleDbDataAdapter oleAdapter = new OleDbDataAdapter();
   oleAdapter.SelectCommand = new OleDbCommand(query, oleConn);
   oleAdapter.Fill(dataSet, "Customer");
   reportDocument.Database.Tables["Customer"].SetDataSource (dataSet);
}

此外,ReportDocument还具有SetDataSource()方法,因此您可以设置整个报表的数据源