using System; using System.Data; using System.Data.Common; using System.Runtime.CompilerServices; using Benner.Tecnologia.Business; using Benner.Tecnologia.Common; using Benner.Tecnologia.DataAccess; namespace Stimulsoft.Report.Dictionary { public class StiBennerAdapterService : StiSqlAdapterService { public override string ServiceName { get { return "Benner Adapter Service"; } } public override StiDataColumnsCollection GetColumnsFromData(StiData data, StiDataSource dataSource) { var dataColumns = new StiDataColumnsCollection(); var bennerSource = dataSource as StiBennerSource; try { if (bennerSource.SqlCommand != null) { var dataAccessService = BusinessPartFactory.CreateDataAccessUtilsService(); var isSqlServer = dataAccessService.GetSqlDriverName().StartsWith("MSSQL"); var driver = DataAccessUtilities.CreateDriver(isSqlServer ? SqlDriverType.MSSql2005 : SqlDriverType.Oracle10G); var bennerConnection = new BennerConnection(driver, dataAccessService.GetConnectionString(), dataAccessService.GetIsParadoxLangDriver()); var bennerDataAdapter = new BennerDataAdapter(bennerConnection); bennerDataAdapter.SelectCommand = new BennerCommand(bennerConnection) {CommandText = bennerSource.SqlCommand}; DataTable dataTable = new DataTable(); dataTable.TableName = bennerSource.Name; bennerDataAdapter.FillSchema(dataTable, SchemaType.Source); foreach (DataColumn column in dataTable.Columns) { dataColumns.Add(new StiDataColumn(column.ColumnName, column.Caption, column.DataType)); } dataTable.Dispose(); } } catch (Exception ex) { throw new Exception(string.Format("Falha ao obter as colunas do datasource: {0}", ex.Message)); } return dataColumns; } public override void SetDataSourceNames(StiData data, StiDataSource dataSource) { base.SetDataSourceNames(data, dataSource); StiDataColumnsCollection dataColumns = new StiDataColumnsCollection(); var sqlSource = dataSource as StiBennerSource; dataSource.Name = "StiBennerSource"; dataSource.Alias = "StiBennerSource"; } public override Type GetDataSourceType() { return typeof(StiBennerSource); } public override Type[] GetDataTypes() { return new[] {typeof (BennerInternalConnection)}; } public override void ConnectDataSourceToData(StiDictionary dictionary, StiDataSource dataSource, bool loadData) { try { dataSource.Disconnect(); if (!loadData) { dataSource.DataTable = new DataTable(); return; } var sqlSource = dataSource as StiBennerSource; foreach (StiData data in dataSource.Dictionary.DataStore) { if (data.Name == sqlSource.NameInSource) { var dataTable = new DataTable(); dataTable.TableName = sqlSource.Name; dataSource.DataTable = dataTable; var dataAccessService = BusinessPartFactory.CreateDataAccessUtilsService(); var isSqlServer = dataAccessService.GetSqlDriverName().StartsWith("MSSQL"); var driver = DataAccessUtilities.CreateDriver(isSqlServer ? SqlDriverType.MSSql2005 : SqlDriverType.Oracle10G); var bennerConnection = new BennerConnection(driver, dataAccessService.GetConnectionString(), dataAccessService.GetIsParadoxLangDriver()); var bennerCommand = new BennerCommand(bennerConnection) { CommandText = sqlSource.SqlCommand }; foreach (StiDataParameter parameter in sqlSource.Parameters) { var bennerParameter = new Parameter { Name = parameter.Name, DataType = (DataType)parameter.Type, Value = parameter.GetParameterValue(), Size = parameter.Size }; bennerCommand.Parameters.Add(bennerParameter); } var bennerDataReader = bennerCommand.ExecuteReader(); dataTable.Load(bennerDataReader); } } } catch (Exception ex) { throw new Exception(string.Format("Falha ao obter os dados do relatório: {0}", ex.Message)); } } public override void CreateConnectionInDataStore(StiDictionary dictionary, StiSqlDatabase database) { #region remove all old data from datastore int index = 0; foreach (StiData data in dictionary.DataStore) { if (data.Name == database.Name) { dictionary.DataStore.RemoveAt(index); break; } index++; } #endregion var isSqlServer = BusinessPartFactory.CreateDataAccessUtilsService().GetSqlDriverName().StartsWith("MSSQL"); var driver = DataAccessUtilities.CreateDriver(isSqlServer ? SqlDriverType.MSSql2005 : SqlDriverType.Oracle10G); var bennerConnection = new BennerConnection(driver, BusinessPartFactory.CreateDataAccessUtilsService().GetConnectionString(), BusinessPartFactory.CreateDataAccessUtilsService().GetIsParadoxLangDriver()); var b = new BennerInternalConnection(bennerConnection); b.Open(); var stiData = new StiData(database.Name, b); stiData.IsReportData = true; dictionary.DataStore.Add(stiData); } } }