你最好还是用sql连接,因为oledb和sql的连接信息不是一样的.
如果你用的是水晶报表的推模式,一般不用设置登陆信息,但是要这样写:obj.SetDataSource(this.ds.Tables["tablename"]);如果你写成了obj.SetDataSource(this.ds)就会有登陆框的。
如果你用的是水晶报表的拉模式,你就一定要写上登陆信息:
crReportDocument = new OracleReport();
//Set the crConnectionInfo with the current values stored in the report crConnectionInfo = crReportDocument.Database.Tables[0].LogOnInfo.ConnectionInfo;
/* Populate the ConnectionInfo Objects Properties with the appropriate values for the ServerName, User ID, Password and DatabaseName. However, since Oracle works on Schemas, Crystal Reports does not recognize or store a DatabaseName. Therefore, the DatabaseName property must be set to a BLANK string. */ crConnectionInfo.DatabaseName = ""; crConnectionInfo.ServerName = "Your Server Name"; crConnectionInfo.UserID = "Your User ID"; crConnectionInfo.Password = "Your Password";
//Set the CrDatabase Object to the Report's Database crDatabase = crReportDocument.Database;
//Set the CrTables object to the Tables collection of the Report's dDtabase crTables = crDatabase.Tables;
//Loop through each Table object in the Tables collection and apply the logon info //specified ealier. Note this sample only has one table so the loop will only execute once foreach (Table crTable in crTables) { crTableLogOnInfo = crTable.LogOnInfo; crTableLogOnInfo.ConnectionInfo = crConnectionInfo; crTable.ApplyLogOnInfo (crTableLogOnInfo);
// if you wish to change the schema name as well, you will need to set Location property as follows: // crTable.Location = "<new schema name>." + crTable.Name; }
//Set the ReportSource of the CrystalReportViewer to the strongly typed Report included in the project crystalReportViewer1.ReportSource = crReportDocument;
还有一点要注意:如果你用到了子报表,一定要处理:
//Go through each sections in the main report and identify the subreport by name crSections = crReportDocument.ReportDefinition.Sections;
foreach(Section crSection in crSections) { crReportObjects = crSection.ReportObjects; //loop through all the report objects to find all the subreports foreach(ReportObject crReportObject in crReportObjects) { if (crReportObject.Kind == ReportObjectKind.SubreportObject) { //you will need to typecast the reportobject to a subreport //object once you find it crSubreportObject = (SubreportObject)crReportObject;
//open the subreport object crSubReportDoc = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName); //Once the correct subreport has been located pass it the //appropriate dataset if(crSubReportDoc.Name == "FirstSub") { //crSubReportDoc.Database.Tables[0].SetDataSource(ds); crSubReportDoc.SetDataSource(ds); } } } } crystalReportViewer1.ReportSource = crReportDocument;
同样crSubReportDoc.SetDataSource(ds);改为:crSubReportDoc.SetDataSource(ds.Tables["tablename"]);
http://dev.csdn.net/develop/article/76/76324.shtm