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;
		}
		protected  virtual void Dispose(bool disposing){
			if (disposing) {
				if (this.reportItemCollection != null) {
					this.reportItemCollection.Clear();
					this.reportItemCollection = null;
				}
				if (this.availableFieldsCollection != null) {
					this.availableFieldsCollection.Clear();
					this.availableFieldsCollection = null;
				}
				if (this.queryParameters != null) {
					this.queryParameters.Clear();
					this.queryParameters = null;
					
				}
				
				if (this.sharpQueryProcedure != null) {
					this.sharpQueryProcedure = null;
				}
				
			}
		
			// Release unmanaged resources.
			// Set large fields to null.
			// Call Dispose on your base class.
		}
		public SharpQueryNodeProcedure(SharpQueryProcedure sharpQueryProcedure)
			: base(sharpQueryProcedure)
		{
			this.ImageIndex = 8;
			this.SelectedImageIndex = 8;
		}