转换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);
}
我不确定这是否可以做到,因为连接类型似乎存储在.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()
方法,因此您可以设置整个报表的数据源