private bool pGetData( ref DataTable vRows, ref DataTable rs, cReportConnect connect, bool createIndexVector, List<object[]> recordsets) { String strConnect = ""; bool saveInReport = false; CSDataBase.cDataBase cn = null; object[] varRs = null; DataTable rsAux = null; DbDataReader dr = null; // if we get an string connection // if (m_launchInfo.getStrConnect().Trim() != "") { strConnect = m_launchInfo.getStrConnect(); } // if m_launchInfo.getStrConnect() is empty we will use // the connection of the connect object // else { strConnect = connect.getStrConnect(); saveInReport = true; } if (!getReportDisconnected()) { if (strConnect.Trim() == "") { cWindow.msgWarning("The connection settings were not defined." + "Both the LaunchInfo and the Connect object have their " + "strConnect property empty. Whitout this connection string " + "it will be imposible to open the connection to the database.", "CSReportEditor"); return false; } cn = new cDataBase(m_databaseEngine); if (m_isForWeb) { cn.setSilent(true); } if (connect.getCommandTimeout() > 0) { cn.setCommandTimeout(connect.getCommandTimeout()); } if (connect.getConnectionTimeout() > 0) { cn.setConnectionTimeout(connect.getConnectionTimeout()); } // open the connection // if (!cn.initDb("", "", "", "", strConnect)) { if (!resumeDBAccessMissing(strConnect, saveInReport, cn)) { return false; } } // we need to prepare the first sentence // String sqlstmt = ""; // if it was a select // if (m_launchInfo.getSqlstmt().Trim() != "") { sqlstmt = m_launchInfo.getSqlstmt(); } else { if (connect.getDataSourceType() == csDataSourceType.CDDTPROCEDURE) { sqlstmt = "exec [" + connect.getDataSource() + "] " + connect.getSqlParameters(); } else if (connect.getDataSourceType() == csDataSourceType.CSDTTABLE) { sqlstmt = "select * from [" + connect.getDataSource() + "]"; } else { sqlstmt = connect.getDataSource(); } } // open the recordset // cn.setOpenRsExDescript(m_descripUser); if (!cn.loadDataTable(true, false, false, sqlstmt, out rs, out dr, "GetData", C_MODULE, "")) { return false; } if (rs.Rows.Count == 0) { vRows = null; if (createIndexVector) { m_vRowsIndex = new int[0]; m_lastRowIndex = -1; } } else { vRows = rs; if (createIndexVector) { m_vRowsIndex = new int[vRows.Rows.Count]; m_lastRowIndex = m_vRowsIndex.Length - 1; int k = 0; for (k = 0; k < m_vRowsIndex.Length; k++) { m_vRowsIndex[k] = k; } } } varRs = new object[2]; varRs[0] = rs; varRs[1] = connect.getDataSource(); recordsets.Add(varRs); // we need to load every recordset from every data source // in the recordset collection (this code suport multiples // recordset in the same reader) // while (!dr.IsClosed && dr.NextResult()) { rsAux = new DataTable(); rsAux.Load(dr); varRs = new object[2]; varRs[0] = rsAux; varRs[1] = connect.getDataSource(); recordsets.Add(varRs); // TODO: check if this works // // we add an empty element to m_collRows to avoid // index of bounds exception // G.redimPreserve(ref m_collRows, m_collRows.Length + 1); } cn.closeDb(); } else { vRows = null; if (createIndexVector) { m_vRowsIndex = new int[0]; m_lastRowIndex = -1; } } if (m_rows != null) { m_recordCount = m_vRowsIndex.Length; } else { m_recordCount = 0; } m_iRow = 0; m_idxGroupHeader = -1; m_idxGroupFooter = -1; return true; }
private bool fillColumns(string sqlstmt) { var db = new cDataBase(csDatabaseEngine.SQL_SERVER); if (db.initDb(m_strConnect)) { DbDataReader rs; if (db.openRs(sqlstmt, out rs, "fillColumns", "cConnect", "Update columns's definition", CSKernelClient.eErrorLevel.eErrorInformation)) { for (int i = 0; i < rs.FieldCount; i++) { var column = new cColumnInfo(); column.setName(rs.GetName(i)); column.setPosition(i); column.setColumnType((csDataType)System.Type.GetTypeCode((rs.GetFieldType(i)))); m_columnsInfo.add(column, ""); } } else { return false; } } return true; }
public void getExecuteCommand(cDataBase db, string sqlstmt) { m_sqlstmt = sqlstmt; m_invoke = new delegateAsyncOpenRsEx(db.asyncOpenRsEx); }
public bool fillParameters(string dataSource) { cDataBase db = new cDataBase(csDatabaseEngine.SQL_SERVER); if (db.initDb(m_strConnect)) { string[] restrictions = new string[4]; restrictions[2] = dataSource; DataTable dt = db.openSchema("ProcedureParameters", restrictions); if (m_parameters == null) m_parameters = new cParameters(); cParameters parameters = new cParameters(); foreach (DataRow row in dt.Rows) { if (row["parameter_mode"].ToString() != "OUT") { cParameter p = null; bool found = false; for (var i = 0; i < m_parameters.count(); i++) { p = m_parameters.item(i); if (p.getName() == row["parameter_name"].ToString()) { found = true; break; } } if (!found) p = null; p = parameters.add(p, ""); p.setName(row["parameter_name"].ToString()); p.setPosition((int)row["ordinal_position"]); p.setColumnType(cDatabaseGlobals.getDataTypeFromString(row["data_type"].ToString())); } } // // openSchema can be sorted by any column (usually by name) // we need this collection to be sorted by position // m_parameters = new cParameters(); for (var j = 1; j < parameters.count() + 1; j++) { cParameter p = null; bool found = false; for (var i = 0; i < parameters.count(); i++) { p = parameters.item(i); if (p.getPosition() == j) { found = true; break; } } if (!found) { throw new Exception("Parameter not found for position: " + j); } else { m_parameters.add(p, p.getKey()); } } return true; } return false; }