From 781eca8ccad8fff0457821a02d4d897aba55bfed Mon Sep 17 00:00:00 2001 From: peterforstmeier Date: Mon, 17 Jan 2011 20:38:59 +0100 Subject: [PATCH] StoredProcedures with Parameters --- .../ReportWizard/WizardPanels/ResultPanel.cs | 193 ++++++------------ .../ICSharpCode.Reports.Core.csproj | 1 + .../BaseClasses/Printing/StandardFormatter.cs | 10 +- .../Project/BaseClasses/SqlParameter.cs | 19 +- .../Project/BaseClasses/TypeHelpers.cs | 73 +++++++ .../Project/DataManager/SqlDataAccess.cs | 2 +- .../Project/ReportParameters.cs | 7 +- 7 files changed, 151 insertions(+), 154 deletions(-) create mode 100644 src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs index 31f693fc76..8f20ffb37a 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.ComponentModel; using System.Data; using System.Data.Common; using System.Drawing; @@ -11,8 +12,10 @@ using System.Xml; using ICSharpCode.Core; using ICSharpCode.Core.WinForms; +using ICSharpCode.Data.Core.Enums; using ICSharpCode.Data.Core.Interfaces; using ICSharpCode.Reports.Core; +using ICSharpCode.Reports.Core.Project.BaseClasses; using ICSharpCode.SharpDevelop; namespace ICSharpCode.Reports.Addin.ReportWizard @@ -55,10 +58,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard private DataSet FillGrid() { - this.connectionObject = ConnectionObject.CreateInstance(this.model.ReportSettings.ConnectionString, - System.Data.Common.DbProviderFactories.GetFactory("System.Data.OleDb")); - -// this.txtSqlString.Text = String.Empty; SqlQueryChecker.Check(model.ReportSettings.CommandType, model.ReportSettings.CommandText); @@ -67,15 +66,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard this.txtSqlString.Text = model.ReportSettings.CommandText; switch (model.ReportSettings.CommandType) { case CommandType.Text: + ITable t = reportStructure.IDatabaseObjectBase as ITable; - connectionObject.QueryString = model.ReportSettings.CommandText; - var d = new SqlDataAccessStrategy(model.ReportSettings,connectionObject); - dataSet = d.ReadData(); + this.connectionObject = CreateConnection (t); + var dataAccess = new SqlDataAccessStrategy(model.ReportSettings,connectionObject); + dataSet = dataAccess.ReadData(); dataSet.Tables[0].TableName = t.Name; break; case CommandType.StoredProcedure: - -// var vv = reportStructure.IDatabaseObjectBase; + dataSet = DatasetFromStoredProcedure(); break; case CommandType.TableDirect: @@ -111,63 +110,79 @@ namespace ICSharpCode.Reports.Addin.ReportWizard return dataSet; } - /* - private DataSet BuildFromSqlString () + ConnectionObject CreateConnection(IDatabaseObjectBase t) { - DbDataAdapter adapter = null; - try { - adapter = this.BuildAdapter(); - DataSet dataSet = ResultPanel.CreateDataSet(); - adapter.Fill(dataSet); - return dataSet; - } finally { - if (adapter.SelectCommand.Connection.State == ConnectionState.Open) { - adapter.SelectCommand.Connection.Close(); - } - } + + var conobj = ConnectionObject.CreateInstance(this.model.ReportSettings.ConnectionString, + System.Data.Common.DbProviderFactories.GetFactory("System.Data.OleDb")); + conobj.QueryString = model.ReportSettings.CommandText; + return conobj; + } - */ DataSet DatasetFromStoredProcedure() { - DbDataAdapter adapter = null; - try { - DataSet dataSet = ResultPanel.CreateDataSet(); - IProcedure tt = reportStructure.IDatabaseObjectBase as IProcedure; - var paramCollection = CheckParameters(tt); + IProcedure procedure = reportStructure.IDatabaseObjectBase as IProcedure; + this.connectionObject = CreateConnection(procedure); + + DataSet dataSet = ResultPanel.CreateDataSet(); + + var paramCollection = CheckParameters(procedure); + + + if (paramCollection.Count > 0) { - if (paramCollection.Count > 0) { - - } else { - adapter = this.BuildAdapter(); - - } + FillParameters(paramCollection); + model.ReportSettings.ParameterCollection.AddRange(paramCollection); + reportStructure.SqlQueryParameters.AddRange(paramCollection); - adapter.Fill(dataSet); - return dataSet; - } finally { - if (adapter.SelectCommand.Connection.State == ConnectionState.Open) { - adapter.SelectCommand.Connection.Close(); + } + + var dataAccess = new SqlDataAccessStrategy(model.ReportSettings,connectionObject); + dataSet = dataAccess.ReadData(); + dataSet.Tables[0].TableName = procedure.Name; + + return dataSet; + } + + + + bool FillParameters(ParameterCollection paramCollection) + { + using (var p = new ParameterDialog(paramCollection)) + { + p.ShowDialog(); + if(p.DialogResult == DialogResult.OK) + { + + } } - } + return true; } + ParameterCollection CheckParameters(IProcedure procedure) { ParameterCollection col = new ParameterCollection(); + SqlParameter par = null; + foreach (var element in procedure.Items) { -// foreach (var element in procedure.Items) { -// Console.WriteLine("{0} - {1}",element.Name,element.DataType); -// -// SqlParameter par = new SqlParameter(element.Name,element.DataType,"",element.ParameterMode); -// -// p.Add(par); -// -// } + DbType dbType = TypeHelpers.DbTypeFromStringRepresenation(element.DataType); + par = new SqlParameter(element.Name,dbType,"",ParameterDirection.Input); + + if (element.ParameterMode == ParameterMode.In) { + par.ParameterDirection = ParameterDirection.Input; + + } else if (element.ParameterMode == ParameterMode. InOut){ + par.ParameterDirection = ParameterDirection.InputOutput; + } + col.Add(par); + } return col; } + private static DataSet CreateDataSet() { DataSet dataSet = new DataSet(); @@ -175,89 +190,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard return dataSet; } - - private DbDataAdapter BuildAdapter () { - DbDataAdapter adapter = this.connectionObject.ProviderFactory.CreateDataAdapter(); - adapter.SelectCommand = (DbCommand)this.BuildCommand(); - return adapter; - } - - private IDbCommand BuildCommand () - { - if (this.connectionObject != null) { - IDbCommand command = this.connectionObject.Connection.CreateCommand(); - command.CommandText = this.model.ReportSettings.CommandText; - command.CommandType = this.model.ReportSettings.CommandType; - return command; - } - throw new MissingDataSourceException(); - } - /* - private DataSet ExecuteStoredProc () - { - - DbDataAdapter adapter = null; - try { - adapter = this.BuildAdapter(); - DataSet dataSet = ResultPanel.CreateDataSet(); - adapter.Fill(dataSet); - return dataSet; - - }finally { - if (adapter.SelectCommand.Connection.State == ConnectionState.Open) { - adapter.SelectCommand.Connection.Close(); - } - } - } - */ - /* - private DataSet ExecuteStoredProc (SharpQueryProcedure procedure) - { - - SharpQuerySchemaClassCollection tmp = procedure.GetSchemaParameters(); - this.sqlParamsCollection = new ParameterCollection(); - SqlParameterConverter converter = new SqlParameterConverter(); - - if (converter.CanConvertFrom(typeof(SharpQuerySchemaClassCollection))) { - if (converter.CanConvertTo(null,typeof(ParameterCollection))){ - sqlParamsCollection = (ParameterCollection)converter.ConvertTo(null, - CultureInfo.InstalledUICulture, - tmp, - typeof(ParameterCollection)); - } - } - - if (sqlParamsCollection.Count > 0){ - using (ParameterDialog inputform = new ParameterDialog(sqlParamsCollection)) { - if ( inputform.ShowDialog() != DialogResult.OK ){ - return null; - } - else - { - IDbCommand command = this.BuildCommand(); - DbDataAdapter adapter = this.BuildAdapter(); - DataSet dataSet = ResultPanel.CreateDataSet(); - try { - SqlDataAccessStrategy.BuildQueryParameters(command,sqlParamsCollection); - adapter.SelectCommand = (DbCommand)command; - - adapter.Fill (dataSet); - return dataSet; - } catch (Exception e) { - MessageService.ShowError(e.Message); - } finally { - if (adapter.SelectCommand.Connection.State == ConnectionState.Open) { - adapter.SelectCommand.Connection.Close(); - } - } - } - } - } - return null; - } - -*/ #endregion diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj index 264bb5786e..b8625d0a3f 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj @@ -77,6 +77,7 @@ Project\Configuration\GlobalAssemblyInfo.cs + diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs index 0a3411dfc0..5e58f993aa 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs @@ -3,6 +3,7 @@ using System; using System.Globalization; +using ICSharpCode.Reports.Core.Project.BaseClasses; /// /// This Class handles the formatting of Output Values depending on there @@ -17,18 +18,11 @@ namespace ICSharpCode.Reports.Core.BaseClasses.Printing internal static class StandardFormatter { - private static TypeCode TypeCodeFromString (string type) { - if (String.IsNullOrEmpty(type)) { - throw new ArgumentNullException("type"); - } - return Type.GetTypeCode( Type.GetType(type)); - } - public static string FormatOutput(string valueToFormat,string format, string dataType, string nullValue ) { - TypeCode typeCode = TypeCodeFromString(dataType); + TypeCode typeCode = TypeHelpers.TypeCodeFromString(dataType); return StandardFormatter.FormatItem(valueToFormat,format, typeCode,nullValue); } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SqlParameter.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SqlParameter.cs index d75552f965..49f2eb2bfe 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SqlParameter.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SqlParameter.cs @@ -19,9 +19,7 @@ namespace ICSharpCode.Reports.Core /// public class SqlParameter : BasicParameter { - DbType dataType; - - ParameterDirection parameterDirection = ParameterDirection.InputOutput; + // ParameterDirection parameterDirection = ParameterDirection.InputOutput; #region Constructor public SqlParameter () @@ -50,7 +48,7 @@ namespace ICSharpCode.Reports.Core ParameterDirection parameterDirection):base(parameterName,parameterValue) { this.DataType = dataType; - this.parameterDirection = parameterDirection; + this.ParameterDirection = parameterDirection; } #endregion @@ -62,20 +60,15 @@ namespace ICSharpCode.Reports.Core /// DbType /// /// - public DbType DataType { - get {return dataType;} - set {dataType = value;} - } + public DbType DataType {get;set;} + - /// /// Direction of Parameter /// ParameterDirection /// - public ParameterDirection ParameterDirection { - get {return parameterDirection;} - set {parameterDirection = value;} - } + public ParameterDirection ParameterDirection {get;set;} + } } diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs new file mode 100644 index 0000000000..a1c67a2cc9 --- /dev/null +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs @@ -0,0 +1,73 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 16.01.2011 + * Time: 17:46 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.Data; + +namespace ICSharpCode.Reports.Core.Project.BaseClasses +{ + /// + /// Description of . + /// + public class TypeHelpers + { + //http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/16e981bd-4fa1-4ad2-9f45-5f434489e1e2/ + + public static DbType DbTypeFromStringRepresenation(string type) + { + switch (type.ToLower()) + { + case "int16": + return DbType.Int16; + case "int32": + return DbType.Int32; + case "int64": + return DbType.Int64; + case "uint16": + return DbType.UInt16; + case "uint32": + return DbType.UInt32; + case "uint64": + return DbType.UInt64; + case "single": + return DbType.Single; + case "double": + return DbType.Double; + case "decimal": + return DbType.Decimal; + case "datetime" : + return DbType.DateTime; + case "datetime2" : + return DbType.DateTime2; + case "boolean" : + return DbType.Boolean; + case "nvarchar": + return DbType.String; + case "varchar": + return DbType.AnsiString; + case "binary": + return DbType.Binary; + case "currency": + return DbType.Currency; + case "guid": + return DbType.Guid; + case "xml": + return DbType.Xml; + default: + return DbType.Object; + } + } + + public static TypeCode TypeCodeFromString (string type) { + if (String.IsNullOrEmpty(type)) { + throw new ArgumentNullException("type"); + } + return Type.GetTypeCode( Type.GetType(type)); + } + } +} diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/SqlDataAccess.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/SqlDataAccess.cs index 750882841d..0dacb10733 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/SqlDataAccess.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/SqlDataAccess.cs @@ -86,7 +86,7 @@ namespace ICSharpCode.Reports.Core } - public static void BuildQueryParameters (IDbCommand cmd, + private static void BuildQueryParameters (IDbCommand cmd, ParameterCollection parameterCollection) { if (parameterCollection != null && parameterCollection.Count > 0) { diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportParameters.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportParameters.cs index c38bcaccfd..ef09c03dd5 100644 --- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportParameters.cs +++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportParameters.cs @@ -11,8 +11,11 @@ using System; /// created by - Forstmeier Peter /// created on - 17.11.2005 22:41:26 /// -namespace ICSharpCode.Reports.Core { - public class ReportParameters : object { +namespace ICSharpCode.Reports.Core +{ + + public class ReportParameters + { private ConnectionObject connectionObject; private ParameterCollection sqlParameters;