Browse Source

PullModel from StoredProcedure

reports
Peter Forstmeier 13 years ago
parent
commit
8a08d3ee0d
  1. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs
  2. 13
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/GeneratePullDataReport.cs
  3. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportStructure.cs
  4. 88
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/PullModelPanel.cs
  5. 29
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs
  6. 3
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  7. 76
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataAccess/SqlDataAccess.cs
  8. 14
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs
  9. 27
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/ConnectionObjectFactory.cs
  10. 13
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/DataManagerFactory.cs
  11. 8
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/SectionFactory.cs
  12. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataAccessStrategy.cs
  13. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportDesignerView.cs

@ -19,7 +19,6 @@ using ICSharpCode.Reports.Addin.SecondaryViews;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Exporter; using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Exporter.ExportRenderer; using ICSharpCode.Reports.Core.Exporter.ExportRenderer;
using ICSharpCode.Reports.Core.Factories;
using ICSharpCode.Reports.Core.Globals; using ICSharpCode.Reports.Core.Globals;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;

13
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/Generators/GeneratePullDataReport.cs

@ -32,13 +32,12 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
base.ReportModel.ReportSettings.ReportType = GlobalEnums.ReportType.DataReport; base.ReportModel.ReportSettings.ReportType = GlobalEnums.ReportType.DataReport;
base.ReportModel.ReportSettings.DataModel = GlobalEnums.PushPullModel.PullData; base.ReportModel.ReportSettings.DataModel = GlobalEnums.PushPullModel.PullData;
base.GenerateReport(); base.GenerateReport();
GlobalEnums.ReportLayout reportLayout = ReportStructure.ReportLayout;
// GlobalEnums.ReportLayout reportLayout = (GlobalEnums.ReportLayout)base.Properties.Get("ReportLayout"); AbstractLayout layout = LayoutFactory.CreateGenerator(reportLayout,base.ReportModel,base.ReportItemCollection);
// AbstractLayout layout = LayoutFactory.CreateGenerator(reportLayout,base.ReportModel,base.ReportItemCollection); layout.CreateReportHeader();
// layout.CreateReportHeader(); layout.CreatePageHeader();
// layout.CreatePageHeader(); layout.CreateDataSection(base.ReportModel.DetailSection);
// layout.CreateDataSection(base.ReportModel.DetailSection); layout.CreatePageFooter();
// layout.CreatePageFooter();
base.WriteToXml(); base.WriteToXml();
} }
} }

27
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/ReportStructure.cs

@ -25,11 +25,10 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
private ReportItemCollection reportItemCollection; private ReportItemCollection reportItemCollection;
private AvailableFieldsCollection availableFieldsCollection; private AvailableFieldsCollection availableFieldsCollection;
private ParameterCollection queryParameters;
public ReportStructure() public ReportStructure()
{ {
SqlQueryParameters = new SqlParameterCollection();
} }
public ReportModel CreateAndFillReportModel () public ReportModel CreateAndFillReportModel ()
@ -102,15 +101,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
public IDatabaseObjectBase IDatabaseObjectBase {get;set;} public IDatabaseObjectBase IDatabaseObjectBase {get;set;}
public ParameterCollection SqlQueryParameters { // public ParameterCollection SqlQueryParameters {
get { // get {
if (this.queryParameters == null) { // if (this.queryParameters == null) {
this.queryParameters = new ParameterCollection(); // this.queryParameters = new ParameterCollection();
} // }
return queryParameters; // return queryParameters;
} // }
} // }
public SqlParameterCollection SqlQueryParameters {get;set;}
#endregion #endregion
@ -166,9 +165,9 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
this.availableFieldsCollection.Clear(); this.availableFieldsCollection.Clear();
this.availableFieldsCollection = null; this.availableFieldsCollection = null;
} }
if (this.queryParameters != null) { if (this.SqlQueryParameters != null) {
this.queryParameters.Clear(); this.SqlQueryParameters.Clear();
this.queryParameters = null; this.SqlQueryParameters = null;
} }
} }

88
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/PullModelPanel.cs

@ -207,58 +207,52 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
} }
private void databasesTree_SelectedItemChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<object> e) private void databasesTree_SelectedItemChanged(object sender, System.Windows.RoutedPropertyChangedEventArgs<object> e)
{ {
if (e.NewValue is IDatabaseObjectBase) if (e.NewValue is IDatabaseObjectBase)
{ {
IDatabase parentDatabase = e.NewValue as IDatabase; IDatabase parentDatabase = e.NewValue as IDatabase;
if (parentDatabase == null) if (parentDatabase == null)
{ {
IDatabaseObjectBase currentDatabaseObject = e.NewValue as IDatabaseObjectBase; IDatabaseObjectBase currentDatabaseObject = e.NewValue as IDatabaseObjectBase;
while (parentDatabase == null)
{
if (currentDatabaseObject.Parent == null)
break;
else if (currentDatabaseObject.Parent is IDatabase)
{
parentDatabase = currentDatabaseObject.Parent as IDatabase;
break;
}
else
currentDatabaseObject = currentDatabaseObject.Parent;
}
}
while (parentDatabase == null)
{
if (currentDatabaseObject.Parent == null)
break;
else if (currentDatabaseObject.Parent is IDatabase)
{
parentDatabase = currentDatabaseObject.Parent as IDatabase;
break;
}
else
currentDatabaseObject = currentDatabaseObject.Parent;
}
}
if (parentDatabase != null) if (parentDatabase != null)
this.currentNode = parentDatabase; this.currentNode = parentDatabase;
if (this.currentNode is IDatabase) if (this.currentNode is IDatabase)
{ {
if (parentDatabase != null) if (parentDatabase != null)
{ {
// this.connectionString = + parentDatabase.ConnectionString; this.connectionString = parentDatabase.ConnectionString;
// this.connectionString = "Driver={SQLServer};" + "Provider=SQLOLEDB;" + parentDatabase.ConnectionString; this.txtSqlString.Enabled = true;
//var cs = new SqlConnection();
//cs.
this.connectionString = "Provider=SQLOLEDB;" + parentDatabase.ConnectionString;
// this.connectionString = parentDatabase.ConnectionString;
this.txtSqlString.Enabled = true;
if (this.firstDrag) if (this.firstDrag)
this.txtSqlString.Text = string.Empty; this.txtSqlString.Text = string.Empty;
firstDrag = false; firstDrag = false;
} }
} }
else else
{ {
this.EnableNext = false; this.EnableNext = false;
} }
} }
} }
// check witch type of node we dragg // check witch type of node we dragg
private static NodeType CheckCurrentNode (IDatabaseObjectBase node) { private static NodeType CheckCurrentNode (IDatabaseObjectBase node) {

29
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs

@ -37,7 +37,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
private System.Windows.Forms.TextBox txtSqlString; private System.Windows.Forms.TextBox txtSqlString;
private ReportStructure reportStructure; private ReportStructure reportStructure;
private ReportModel model; private ReportModel model;
private ConnectionObject connectionObject;
private DataSet resultDataSet; private DataSet resultDataSet;
@ -67,15 +66,14 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
this.txtSqlString.Text = model.ReportSettings.CommandText; this.txtSqlString.Text = model.ReportSettings.CommandText;
this.connectionObject = CreateConnection (); var dataAccess = new SqlDataAccessStrategy(model.ReportSettings);
var dataAccess = new SqlDataAccessStrategy(model.ReportSettings,connectionObject);
switch (model.ReportSettings.CommandType) { switch (model.ReportSettings.CommandType) {
case CommandType.Text: case CommandType.Text:
dataSet = DatasetFromSqlText(dataAccess); dataSet = DataSetFromSqlText(dataAccess);
break; break;
case CommandType.StoredProcedure: case CommandType.StoredProcedure:
dataSet = DatasetFromStoredProcedure(dataAccess); dataSet = DataSetFromStoredProcedure(dataAccess);
break; break;
case CommandType.TableDirect: case CommandType.TableDirect:
MessageService.ShowError("TableDirect is not suppurted at the moment"); MessageService.ShowError("TableDirect is not suppurted at the moment");
@ -87,17 +85,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
} }
ConnectionObject CreateConnection()
{
var conobj = ConnectionObject.CreateInstance(this.model.ReportSettings.ConnectionString,
System.Data.Common.DbProviderFactories.GetFactory("System.Data.OleDb"));
conobj.QueryString = model.ReportSettings.CommandText;
return conobj;
}
string CreateTableName(ReportStructure reportStructure) string CreateTableName(ReportStructure reportStructure)
{ {
ITable t = reportStructure.IDatabaseObjectBase as ITable; ITable t = reportStructure.IDatabaseObjectBase as ITable;
@ -114,7 +101,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
} }
private DataSet DatasetFromSqlText(IDataAccessStrategy dataAccess) private DataSet DataSetFromSqlText(IDataAccessStrategy dataAccess)
{ {
var dataSet = dataAccess.ReadData(); var dataSet = dataAccess.ReadData();
dataSet.Tables[0].TableName = CreateTableName (reportStructure); dataSet.Tables[0].TableName = CreateTableName (reportStructure);
@ -122,7 +109,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
} }
private DataSet DatasetFromStoredProcedure(IDataAccessStrategy dataAccess) private DataSet DataSetFromStoredProcedure(IDataAccessStrategy dataAccess)
{ {
DataSet dataSet = ResultPanel.CreateDataSet(); DataSet dataSet = ResultPanel.CreateDataSet();
@ -131,7 +118,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
if (paramCollection.Count > 0) { if (paramCollection.Count > 0) {
FillParameters(paramCollection); FillParameters(paramCollection);
reportStructure.SqlQueryParameters.AddRange(paramCollection); reportStructure.SqlQueryParameters.AddRange(model.ReportSettings.SqlParameters);
} }
dataSet = dataAccess.ReadData(); dataSet = dataAccess.ReadData();
dataSet.Tables[0].TableName = procedure.Name; dataSet.Tables[0].TableName = procedure.Name;
@ -140,7 +127,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
void FillParameters(ParameterCollection paramCollection) void FillParameters(ParameterCollection paramCollection)
{ {
foreach (var param in paramCollection) { foreach (var param in paramCollection) {
SqlParameter s = new SqlParameter() SqlParameter s = new SqlParameter()

3
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -280,8 +280,7 @@
<Compile Include="Project\Expressions\SimpleExpressionEvaluator\Utilities\ReflectionExtensions.cs" /> <Compile Include="Project\Expressions\SimpleExpressionEvaluator\Utilities\ReflectionExtensions.cs" />
<Compile Include="Project\Expressions\SimpleExpressionEvaluator\Utilities\TypeNormalizer.cs" /> <Compile Include="Project\Expressions\SimpleExpressionEvaluator\Utilities\TypeNormalizer.cs" />
<Compile Include="Project\Expressions\UnknownFunctionException.cs" /> <Compile Include="Project\Expressions\UnknownFunctionException.cs" />
<Compile Include="Project\Factories\ConnectionObjectFactory.cs" /> <Compile Include="Project\Factories\DataManagerFactory.cs" />
<Compile Include="Project\Factories\DataManagerFacrory.cs" />
<Compile Include="Project\Factories\DisplayNameAttribute.cs" /> <Compile Include="Project\Factories\DisplayNameAttribute.cs" />
<Compile Include="Project\Factories\RendererFactory.cs" /> <Compile Include="Project\Factories\RendererFactory.cs" />
<Compile Include="Project\Factories\SectionFactory.cs" /> <Compile Include="Project\Factories\SectionFactory.cs" />

76
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataAccess/SqlDataAccess.cs

@ -3,9 +3,9 @@
using System; using System;
using System.Data; using System.Data;
using System.Data.SqlClient;
using System.Globalization; using System.Globalization;
using ICSharpCode.Reports.Core.Factories;
using ICSharpCode.Reports.Core.Project.Interfaces; using ICSharpCode.Reports.Core.Project.Interfaces;
namespace ICSharpCode.Reports.Core.DataAccess namespace ICSharpCode.Reports.Core.DataAccess
@ -17,85 +17,43 @@ namespace ICSharpCode.Reports.Core.DataAccess
public class SqlDataAccessStrategy:IDataAccessStrategy public class SqlDataAccessStrategy:IDataAccessStrategy
{ {
private ConnectionObject connectionObject;
private ReportSettings reportSettings; private ReportSettings reportSettings;
public SqlDataAccessStrategy(ReportSettings reportSettings,ConnectionObject connectionObject) public SqlDataAccessStrategy(ReportSettings reportSettings)
{ {
if (reportSettings == null) { if (reportSettings == null) {
throw new ArgumentNullException("reportSettings"); throw new ArgumentNullException("reportSettings");
} }
this.reportSettings = reportSettings; this.reportSettings = reportSettings;
if (connectionObject == null) {
this.connectionObject = ConnectionObjectFactory.BuildConnectionObject(reportSettings);
} else {
this.connectionObject = connectionObject;
}
}
public bool OpenConnection ()
{
CheckConnection();
return true;
}
private void CheckConnection()
{
if (this.connectionObject.Connection.State == ConnectionState.Open) {
this.connectionObject.Connection.Close();
}
this.connectionObject.Connection.Open();
} }
public DataSet ReadData() public DataSet ReadData ()
{ {
try { using (SqlConnection connection = new SqlConnection(this.reportSettings.ConnectionString)){
if (this.connectionObject.Connection.State == ConnectionState.Closed) { connection.Open();
this.connectionObject.Connection.Open();
}
IDbCommand command = this.connectionObject.Connection.CreateCommand();
if (String.IsNullOrEmpty(this.connectionObject.QueryString)) { using (SqlCommand command = connection.CreateCommand()) {
command.CommandText = reportSettings.CommandText; command.CommandText = reportSettings.CommandText;
} else { command.CommandType = reportSettings.CommandType;
command.CommandText = this.connectionObject.QueryString; BuildQueryParameters(command,reportSettings.SqlParameters);
} using (SqlDataAdapter adapter = new SqlDataAdapter(command)){
DataSet ds = new DataSet();
command.CommandType = reportSettings.CommandType; ds.Locale = CultureInfo.CurrentCulture;
// We have to check if there are parameters for this Query, if so adapter.Fill (ds);
// add them to the command return ds;
}
BuildQueryParameters(command,reportSettings.SqlParameters);
IDbDataAdapter adapter = connectionObject.CreateDataAdapter(command);
DataSet ds = new DataSet();
ds.Locale = CultureInfo.CurrentCulture;
adapter.Fill (ds);
return ds;
} finally {
if (this.connectionObject.Connection.State == ConnectionState.Open) {
this.connectionObject.Connection.Close();
} }
} }
} }
private static void BuildQueryParameters (IDbCommand cmd, private static void BuildQueryParameters (IDbCommand cmd,SqlParameterCollection parameterCollection){
SqlParameterCollection parameterCollection)
{
if (parameterCollection != null && parameterCollection.Count > 0) { if (parameterCollection != null && parameterCollection.Count > 0) {
IDbDataParameter cmdPar = null;
foreach (SqlParameter par in parameterCollection) { foreach (SqlParameter par in parameterCollection) {
cmdPar = cmd.CreateParameter(); var cmdPar = cmd.CreateParameter();
cmdPar.ParameterName = par.ParameterName; cmdPar.ParameterName = par.ParameterName;
Console.WriteLine("");
Console.WriteLine("BuildQueryParameters {0} - {1}",par.ParameterName,par.ParameterValue);
if (par.DataType != System.Data.DbType.Binary) { if (par.DataType != System.Data.DbType.Binary) {
cmdPar.DbType = par.DataType; cmdPar.DbType = par.DataType;
cmdPar.Value = par.ParameterValue; cmdPar.Value = par.ParameterValue;

14
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/DataManager.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.Reports.Core
private string dataMember; private string dataMember;
private IDataViewStrategy dataViewStrategy; private IDataViewStrategy dataViewStrategy;
private IDataNavigator dataNavigator; private IDataNavigator dataNavigator;
private IDataAccessStrategy dataAccess; // private IDataAccessStrategy dataAccess;
#region Constructor - DataAccess #region Constructor - DataAccess
@ -55,15 +55,11 @@ namespace ICSharpCode.Reports.Core
private DataManager (ReportSettings reportSettings,IDataAccessStrategy dataAccess) private DataManager (ReportSettings reportSettings,IDataAccessStrategy dataAccess)
{ {
this.dataAccess = dataAccess; DataSet dataSet = dataAccess.ReadData();
this.Init(reportSettings,dataSet.Tables[0]);
this.dataViewStrategy = new TableStrategy((DataTable)this.dataSource,
reportSettings);
if (this.dataAccess.OpenConnection()) {
DataSet t = this.dataAccess.ReadData();
this.Init(reportSettings,t.Tables[0]);
this.dataViewStrategy = new TableStrategy((DataTable)this.dataSource,
reportSettings);
}
} }
#endregion #endregion

27
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/ConnectionObjectFactory.cs

@ -1,27 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Data.Common;
namespace ICSharpCode.Reports.Core.Factories
{
/// <summary>
/// This Class is a FactoryClass for <see cref="ConnectionObject"></see>
/// </summary>
public sealed class ConnectionObjectFactory
{
private ConnectionObjectFactory()
{
}
public static ConnectionObject BuildConnectionObject (ReportSettings reportSettings)
{
if (reportSettings == null) {
throw new ArgumentNullException("reportSettings");
}
return ConnectionObject.CreateInstance(reportSettings.ConnectionString,
DbProviderFactories.GetFactory("System.Data.OleDb"));
}
}
}

13
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/DataManagerFacrory.cs → src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/DataManagerFactory.cs

@ -30,12 +30,13 @@ namespace ICSharpCode.Reports.Core
connectionObject = reportParameters.ConnectionObject; connectionObject = reportParameters.ConnectionObject;
} }
if (connectionObject != null) { // if (connectionObject != null) {
accesStrategy = new SqlDataAccessStrategy(reportModel.ReportSettings,connectionObject); // accesStrategy = new SqlDataAccessStrategy(reportModel.ReportSettings,connectionObject);
} else { // } else {
accesStrategy = new SqlDataAccessStrategy(reportModel.ReportSettings,null); // accesStrategy = new SqlDataAccessStrategy(reportModel.ReportSettings,null);
//
} // }
accesStrategy = new SqlDataAccessStrategy(reportModel.ReportSettings);
dataManager = DataManager.CreateInstance(reportModel.ReportSettings,accesStrategy); dataManager = DataManager.CreateInstance(reportModel.ReportSettings,accesStrategy);
if (dataManager == null) { if (dataManager == null) {
throw new MissingDataManagerException(); throw new MissingDataManagerException();

8
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Factories/SectionFactory.cs

@ -19,13 +19,13 @@ namespace ICSharpCode.Reports.Core
{ {
} }
public static BaseSection Create(string name) { public static BaseSection Create(string sectionName) {
if (String.IsNullOrEmpty(name)) { if (String.IsNullOrEmpty(sectionName)) {
String str = String.Format(System.Globalization.CultureInfo.CurrentCulture, String str = String.Format(System.Globalization.CultureInfo.CurrentCulture,
"<{0}>",name); "<{0}>",sectionName);
throw new UnknownItemException(str); throw new UnknownItemException(str);
} }
return new BaseSection(name); return new BaseSection(sectionName);
} }
} }

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/Interfaces/IDataAccessStrategy.cs

@ -11,7 +11,6 @@ namespace ICSharpCode.Reports.Core.Project.Interfaces
/// </summary> /// </summary>
public interface IDataAccessStrategy public interface IDataAccessStrategy
{ {
bool OpenConnection ();
DataSet ReadData(); DataSet ReadData();
} }
} }

1
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportEngine.cs

@ -10,7 +10,6 @@ using System.Windows.Forms;
using System.Xml; using System.Xml;
using ICSharpCode.Reports.Core.BaseClasses; using ICSharpCode.Reports.Core.BaseClasses;
using ICSharpCode.Reports.Core.Exporter; using ICSharpCode.Reports.Core.Exporter;
using ICSharpCode.Reports.Core.Factories;
using ICSharpCode.Reports.Core.Globals; using ICSharpCode.Reports.Core.Globals;
using ICSharpCode.Reports.Core.Interfaces; using ICSharpCode.Reports.Core.Interfaces;

Loading…
Cancel
Save