ListDictionary _Items; // list of report items public DataSourcesDefn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { // Run thru the attributes // foreach(XmlAttribute xAttr in xNode.Attributes) // { // } _Items = new ListDictionary(); // Loop thru all the child nodes foreach (XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) { continue; } if (xNodeLoop.Name == "DataSource") { DataSourceDefn ds = new DataSourceDefn(r, this, xNodeLoop); if (ds.Name != null) { _Items.Add(ds.Name.Nm, ds); } } } if (_Items.Count == 0) { OwnerReport.rl.LogError(8, "For DataSources at least one DataSource is required."); } }
public bool AreSameDataSource(DataSourceDefn dsd) { if (this.DataSourceReference != null && this.DataSourceReference == dsd.DataSourceReference) { return(true); // datasource references are the same } if (this.ConnectionProperties == null || dsd.ConnectionProperties == null) { return(false); } ConnectionProperties cp1 = this.ConnectionProperties; ConnectionProperties cp2 = dsd.ConnectionProperties; return(cp1.DataProvider == cp2.DataProvider && cp1.ConnectstringValue == cp2.ConnectstringValue && cp1.IntegratedSecurity == cp2.IntegratedSecurity); }
ListDictionary _Items; // list of report items public DataSourcesDefn(ReportDefn r, ReportLink p, XmlNode xNode) : base(r, p) { // Run thru the attributes // foreach(XmlAttribute xAttr in xNode.Attributes) // { // } _Items = new ListDictionary(); // Loop thru all the child nodes foreach(XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) continue; if (xNodeLoop.Name == "DataSource") { DataSourceDefn ds = new DataSourceDefn(r, this, xNodeLoop); if (ds.Name != null) _Items.Add(ds.Name.Nm, ds); } } if (_Items.Count == 0) OwnerReport.rl.LogError(8, "For DataSources at least one DataSource is required."); }
public bool AreSameDataSource(DataSourceDefn dsd) { if (this.DataSourceReference != null && this.DataSourceReference == dsd.DataSourceReference) return true; // datasource references are the same if (this.ConnectionProperties == null || dsd.ConnectionProperties == null) return false; ConnectionProperties cp1 = this.ConnectionProperties; ConnectionProperties cp2 = dsd.ConnectionProperties; return (cp1.DataProvider == cp2.DataProvider && cp1.ConnectstringValue == cp2.ConnectstringValue && cp1.IntegratedSecurity == cp2.IntegratedSecurity); }
public bool GetData(Report rpt, Fields flds, Filters f) { Rows uData = this.GetMyUserData(rpt); if (uData != null) { this.SetMyData(rpt, uData); return(uData.Data == null || uData.Data.Count == 0 ? false : true); } // Treat this as a SQL statement DataSourceDefn ds = _DataSourceDefn; if (ds == null || _CommandText == null) { this.SetMyData(rpt, null); return(false); } IDbConnection cnSQL = ds.SqlConnect(rpt); if (cnSQL == null) { this.SetMyData(rpt, null); return(false); } Rows _Data = new Rows(rpt, null, null, null); // no sorting and grouping at base data String sql = _CommandText.EvaluateString(rpt, null); IDbCommand cmSQL = null; IDataReader dr = null; try { cmSQL = cnSQL.CreateCommand(); cmSQL.CommandText = AddParametersAsLiterals(rpt, cnSQL, sql, true); if (this._QueryCommandType == QueryCommandTypeEnum.StoredProcedure) { cmSQL.CommandType = CommandType.StoredProcedure; } if (this._Timeout > 0) { cmSQL.CommandTimeout = this._Timeout; } AddParameters(rpt, cnSQL, cmSQL, true); dr = cmSQL.ExecuteReader(CommandBehavior.SingleResult); List <Row> ar = new List <Row>(); _Data.Data = ar; int rowCount = 0; int maxRows = _RowLimit > 0? _RowLimit: int.MaxValue; int fieldCount = flds.Items.Count; // Determine the query column number for each field int[] qcn = new int[flds.Items.Count]; foreach (Field fld in flds) { qcn[fld.ColumnNumber] = -1; if (fld.Value != null) { continue; } try { qcn[fld.ColumnNumber] = dr.GetOrdinal(fld.DataField); } catch { qcn[fld.ColumnNumber] = -1; } } while (dr.Read()) { Row or = new Row(_Data, fieldCount); foreach (Field fld in flds) { if (qcn[fld.ColumnNumber] != -1) { or.Data[fld.ColumnNumber] = dr.GetValue(qcn[fld.ColumnNumber]); } } // Apply the filters if (f == null || f.Apply(rpt, or)) { or.RowNumber = rowCount; // rowCount++; ar.Add(or); } if (--maxRows <= 0) // don't retrieve more than max { break; } } ar.TrimExcess(); // free up any extraneous space; can be sizeable for large # rows if (f != null) { f.ApplyFinalFilters(rpt, _Data, false); } //#if DEBUG // rpt.rl.LogError(4, "Rows Read:" + ar.Count.ToString() + " SQL:" + sql ); //#endif } catch (Exception e) { rpt.rl.LogError(8, "SQL Exception" + e.Message + "\r\n" + e.StackTrace); } finally { if (cmSQL != null) { cmSQL.Dispose(); if (dr != null) { dr.Close(); } } } this.SetMyData(rpt, _Data); return(_Data == null || _Data.Data == null || _Data.Data.Count == 0 ? false : true); }
// Handle parsing of function in final pass override public void FinalPass() { if (_CommandText != null) { _CommandText.FinalPass(); } if (_QueryParameters != null) { _QueryParameters.FinalPass(); } // verify the data source DataSourceDefn ds = null; if (OwnerReport.DataSourcesDefn != null && OwnerReport.DataSourcesDefn.Items != null) { ds = OwnerReport.DataSourcesDefn[_DataSourceName]; } if (ds == null) { OwnerReport.rl.LogError(8, "Query references unknown data source '" + _DataSourceName + "'"); return; } _DataSourceDefn = ds; IDbConnection cnSQL = ds.SqlConnect(null); if (cnSQL == null || _CommandText == null) { return; } // Treat this as a SQL statement String sql = _CommandText.EvaluateString(null, null); IDbCommand cmSQL = null; IDataReader dr = null; try { cmSQL = cnSQL.CreateCommand(); cmSQL.CommandText = AddParametersAsLiterals(null, cnSQL, sql, false); if (this._QueryCommandType == QueryCommandTypeEnum.StoredProcedure) { cmSQL.CommandType = CommandType.StoredProcedure; } AddParameters(null, cnSQL, cmSQL, false); dr = cmSQL.ExecuteReader(CommandBehavior.SchemaOnly); if (dr.FieldCount < 10) { _Columns = new ListDictionary(); // Hashtable is overkill for small lists } else { _Columns = new Hashtable(dr.FieldCount); } for (int i = 0; i < dr.FieldCount; i++) { QueryColumn qc = new QueryColumn(i, dr.GetName(i), Type.GetTypeCode(dr.GetFieldType(i))); try { _Columns.Add(qc.colName, qc); } catch // name has already been added to list: { // According to the RDL spec SQL names are matched by Name not by relative // position: this seems wrong to me and causes this problem; but // user can fix by using "as" keyword to name columns in Select // e.g. Select col as "col1", col as "col2" from tableA OwnerReport.rl.LogError(8, String.Format("Column '{0}' is not uniquely defined within the SQL Select columns.", qc.colName)); } } } catch (Exception e) { OwnerReport.rl.LogError(4, "SQL Exception during report compilation: " + e.Message + "\r\nSQL: " + sql); } finally { if (cmSQL != null) { cmSQL.Dispose(); if (dr != null) { dr.Close(); } } } return; }
DataSourceDefn _dsd; // DataSource definition public DataSource(Report rpt, DataSourceDefn dsd) { _rpt = rpt; _dsd = dsd; }
// Handle parsing of function in final pass override public void FinalPass() { if (_CommandText != null) _CommandText.FinalPass(); if (_QueryParameters != null) _QueryParameters.FinalPass(); // verify the data source DataSourceDefn ds=null; if (OwnerReport.DataSourcesDefn != null && OwnerReport.DataSourcesDefn.Items != null) { ds = OwnerReport.DataSourcesDefn[_DataSourceName]; } if (ds == null) { OwnerReport.rl.LogError(8, "Query references unknown data source '" + _DataSourceName + "'"); return; } _DataSourceDefn = ds; IDbConnection cnSQL = ds.SqlConnect(null); if (cnSQL == null || _CommandText == null) return; // Treat this as a SQL statement String sql = _CommandText.EvaluateString(null, null); IDbCommand cmSQL=null; IDataReader dr=null; try { cmSQL = cnSQL.CreateCommand(); cmSQL.CommandText = AddParametersAsLiterals(null, cnSQL, sql, false); if (this._QueryCommandType == QueryCommandTypeEnum.StoredProcedure) cmSQL.CommandType = CommandType.StoredProcedure; AddParameters(null, cnSQL, cmSQL, false); dr = cmSQL.ExecuteReader(CommandBehavior.SchemaOnly); if (dr.FieldCount < 10) _Columns = new ListDictionary(); // Hashtable is overkill for small lists else _Columns = new Hashtable(dr.FieldCount); for (int i=0; i < dr.FieldCount; i++) { QueryColumn qc = new QueryColumn(i, dr.GetName(i), Type.GetTypeCode(dr.GetFieldType(i)) ); try { _Columns.Add(qc.colName, qc); } catch // name has already been added to list: { // According to the RDL spec SQL names are matched by Name not by relative // position: this seems wrong to me and causes this problem; but // user can fix by using "as" keyword to name columns in Select // e.g. Select col as "col1", col as "col2" from tableA OwnerReport.rl.LogError(8, String.Format("Column '{0}' is not uniquely defined within the SQL Select columns.", qc.colName)); } } } catch (Exception e) { OwnerReport.rl.LogError(4, "SQL Exception during report compilation: " + e.Message + "\r\nSQL: " + sql); } finally { if (cmSQL != null) { cmSQL.Dispose(); if (dr != null) dr.Close(); } } return; }