Browse Source

StoredProcedures with Parameters

pull/15/head^2
peterforstmeier 15 years ago
parent
commit
781eca8cca
  1. 193
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/Project/ReportWizard/WizardPanels/ResultPanel.cs
  2. 1
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  3. 10
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs
  4. 19
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SqlParameter.cs
  5. 73
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/TypeHelpers.cs
  6. 2
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/DataManager/SqlDataAccess.cs
  7. 7
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportParameters.cs

193
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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.ComponentModel;
using System.Data; using System.Data;
using System.Data.Common; using System.Data.Common;
using System.Drawing; using System.Drawing;
@ -11,8 +12,10 @@ using System.Xml;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.WinForms; using ICSharpCode.Core.WinForms;
using ICSharpCode.Data.Core.Enums;
using ICSharpCode.Data.Core.Interfaces; using ICSharpCode.Data.Core.Interfaces;
using ICSharpCode.Reports.Core; using ICSharpCode.Reports.Core;
using ICSharpCode.Reports.Core.Project.BaseClasses;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
namespace ICSharpCode.Reports.Addin.ReportWizard namespace ICSharpCode.Reports.Addin.ReportWizard
@ -55,10 +58,6 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
private DataSet FillGrid() 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, SqlQueryChecker.Check(model.ReportSettings.CommandType,
model.ReportSettings.CommandText); model.ReportSettings.CommandText);
@ -67,15 +66,15 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
this.txtSqlString.Text = model.ReportSettings.CommandText; this.txtSqlString.Text = model.ReportSettings.CommandText;
switch (model.ReportSettings.CommandType) { switch (model.ReportSettings.CommandType) {
case CommandType.Text: case CommandType.Text:
ITable t = reportStructure.IDatabaseObjectBase as ITable; ITable t = reportStructure.IDatabaseObjectBase as ITable;
connectionObject.QueryString = model.ReportSettings.CommandText; this.connectionObject = CreateConnection (t);
var d = new SqlDataAccessStrategy(model.ReportSettings,connectionObject); var dataAccess = new SqlDataAccessStrategy(model.ReportSettings,connectionObject);
dataSet = d.ReadData(); dataSet = dataAccess.ReadData();
dataSet.Tables[0].TableName = t.Name; dataSet.Tables[0].TableName = t.Name;
break; break;
case CommandType.StoredProcedure: case CommandType.StoredProcedure:
// var vv = reportStructure.IDatabaseObjectBase;
dataSet = DatasetFromStoredProcedure(); dataSet = DatasetFromStoredProcedure();
break; break;
case CommandType.TableDirect: case CommandType.TableDirect:
@ -111,63 +110,79 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
return dataSet; return dataSet;
} }
/* ConnectionObject CreateConnection(IDatabaseObjectBase t)
private DataSet BuildFromSqlString ()
{ {
DbDataAdapter adapter = null;
try { var conobj = ConnectionObject.CreateInstance(this.model.ReportSettings.ConnectionString,
adapter = this.BuildAdapter(); System.Data.Common.DbProviderFactories.GetFactory("System.Data.OleDb"));
DataSet dataSet = ResultPanel.CreateDataSet(); conobj.QueryString = model.ReportSettings.CommandText;
adapter.Fill(dataSet); return conobj;
return dataSet;
} finally {
if (adapter.SelectCommand.Connection.State == ConnectionState.Open) {
adapter.SelectCommand.Connection.Close();
}
}
} }
*/
DataSet DatasetFromStoredProcedure() DataSet DatasetFromStoredProcedure()
{ {
DbDataAdapter adapter = null; IProcedure procedure = reportStructure.IDatabaseObjectBase as IProcedure;
try { this.connectionObject = CreateConnection(procedure);
DataSet dataSet = ResultPanel.CreateDataSet();
IProcedure tt = reportStructure.IDatabaseObjectBase as IProcedure; DataSet dataSet = ResultPanel.CreateDataSet();
var paramCollection = CheckParameters(tt);
var paramCollection = CheckParameters(procedure);
if (paramCollection.Count > 0) {
if (paramCollection.Count > 0) { FillParameters(paramCollection);
model.ReportSettings.ParameterCollection.AddRange(paramCollection);
} else { reportStructure.SqlQueryParameters.AddRange(paramCollection);
adapter = this.BuildAdapter();
}
adapter.Fill(dataSet); }
return dataSet;
} finally { var dataAccess = new SqlDataAccessStrategy(model.ReportSettings,connectionObject);
if (adapter.SelectCommand.Connection.State == ConnectionState.Open) { dataSet = dataAccess.ReadData();
adapter.SelectCommand.Connection.Close(); 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 CheckParameters(IProcedure procedure)
{ {
ParameterCollection col = new ParameterCollection(); ParameterCollection col = new ParameterCollection();
SqlParameter par = null;
foreach (var element in procedure.Items) {
// foreach (var element in procedure.Items) { DbType dbType = TypeHelpers.DbTypeFromStringRepresenation(element.DataType);
// Console.WriteLine("{0} - {1}",element.Name,element.DataType); par = new SqlParameter(element.Name,dbType,"",ParameterDirection.Input);
//
// SqlParameter par = new SqlParameter(element.Name,element.DataType,"",element.ParameterMode); if (element.ParameterMode == ParameterMode.In) {
// par.ParameterDirection = ParameterDirection.Input;
// p.Add(par);
// } else if (element.ParameterMode == ParameterMode. InOut){
// } par.ParameterDirection = ParameterDirection.InputOutput;
}
col.Add(par);
}
return col; return col;
} }
private static DataSet CreateDataSet() private static DataSet CreateDataSet()
{ {
DataSet dataSet = new DataSet(); DataSet dataSet = new DataSet();
@ -175,89 +190,7 @@ namespace ICSharpCode.Reports.Addin.ReportWizard
return dataSet; 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 #endregion

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

@ -77,6 +77,7 @@
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> <Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Project\Configuration\GlobalAssemblyInfo.cs</Link> <Link>Project\Configuration\GlobalAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="Project\BaseClasses\TypeHelpers.cs" />
<Compile Include="Project\BaseClasses\CurrentItem.cs" /> <Compile Include="Project\BaseClasses\CurrentItem.cs" />
<Compile Include="Project\BaseClasses\GroupColumn.cs" /> <Compile Include="Project\BaseClasses\GroupColumn.cs" />
<Compile Include="Project\BaseClasses\PageInfo.cs" /> <Compile Include="Project\BaseClasses\PageInfo.cs" />

10
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/Printing/StandardFormatter.cs

@ -3,6 +3,7 @@
using System; using System;
using System.Globalization; using System.Globalization;
using ICSharpCode.Reports.Core.Project.BaseClasses;
/// <summary> /// <summary>
/// This Class handles the formatting of Output Values depending on there /// 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 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, public static string FormatOutput(string valueToFormat,string format,
string dataType, string nullValue ) string dataType, string nullValue )
{ {
TypeCode typeCode = TypeCodeFromString(dataType); TypeCode typeCode = TypeHelpers.TypeCodeFromString(dataType);
return StandardFormatter.FormatItem(valueToFormat,format, return StandardFormatter.FormatItem(valueToFormat,format,
typeCode,nullValue); typeCode,nullValue);
} }

19
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/BaseClasses/SqlParameter.cs

@ -19,9 +19,7 @@ namespace ICSharpCode.Reports.Core
/// </remarks> /// </remarks>
public class SqlParameter : BasicParameter { public class SqlParameter : BasicParameter {
DbType dataType; // ParameterDirection parameterDirection = ParameterDirection.InputOutput;
ParameterDirection parameterDirection = ParameterDirection.InputOutput;
#region Constructor #region Constructor
public SqlParameter () public SqlParameter ()
@ -50,7 +48,7 @@ namespace ICSharpCode.Reports.Core
ParameterDirection parameterDirection):base(parameterName,parameterValue) ParameterDirection parameterDirection):base(parameterName,parameterValue)
{ {
this.DataType = dataType; this.DataType = dataType;
this.parameterDirection = parameterDirection; this.ParameterDirection = parameterDirection;
} }
#endregion #endregion
@ -62,20 +60,15 @@ namespace ICSharpCode.Reports.Core
/// <see cref="System.Data.DbType">DbType</see> /// <see cref="System.Data.DbType">DbType</see>
/// </summary> /// </summary>
/// ///
public DbType DataType { public DbType DataType {get;set;}
get {return dataType;}
set {dataType = value;}
}
///<summary> ///<summary>
/// Direction of Parameter /// Direction of Parameter
/// <see cref="System.Data.ParameterDirection">ParameterDirection</see> /// <see cref="System.Data.ParameterDirection">ParameterDirection</see>
///</summary> ///</summary>
public ParameterDirection ParameterDirection { public ParameterDirection ParameterDirection {get;set;}
get {return parameterDirection;}
set {parameterDirection = value;}
}
} }
} }

73
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
{
/// <summary>
/// Description of .
/// </summary>
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));
}
}
}

2
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) ParameterCollection parameterCollection)
{ {
if (parameterCollection != null && parameterCollection.Count > 0) { if (parameterCollection != null && parameterCollection.Count > 0) {

7
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Project/ReportParameters.cs

@ -11,8 +11,11 @@ using System;
/// created by - Forstmeier Peter /// created by - Forstmeier Peter
/// created on - 17.11.2005 22:41:26 /// created on - 17.11.2005 22:41:26
/// </remarks> /// </remarks>
namespace ICSharpCode.Reports.Core { namespace ICSharpCode.Reports.Core
public class ReportParameters : object { {
public class ReportParameters
{
private ConnectionObject connectionObject; private ConnectionObject connectionObject;
private ParameterCollection sqlParameters; private ParameterCollection sqlParameters;

Loading…
Cancel
Save