Example #1
0
        public void Build(IDbCommand adoCommand)
        {
            adoCommand.CommandText = this.Data.QueryText;

            if (this.Data.Parameters != null)
            {
                foreach (IParameter parameter in this.Data.Parameters.GroupBy(p => p.Name).Select(g => g.First()))
                {
                    adoCommand.Parameters.Add(ParameterHelper.CreateAdoParameter(adoCommand, parameter));
                }
            }
        }
Example #2
0
        public void Build(IDbCommand adoCommand)
        {
            adoCommand.CommandText = this.Data.CommandText;

            Dictionary <string, IDbDataParameter> adoMap = new Dictionary <string, IDbDataParameter>();

            foreach (IParameter parameter in this.Data.Parameters.Where(p => !adoMap.ContainsKey(p.Name)))
            {
                IDbDataParameter adoParameter = ParameterHelper.CreateAdoParameter(adoCommand, parameter);

                if (parameter.Field != null)
                {
                    FieldData fieldData = this.Map.Get(parameter.Field);

                    if (fieldData != null)
                    {
                        adoParameter.Value = fieldData.GetValue();
                    }
                }

                adoMap.Add(parameter.Name, adoParameter);
                adoCommand.Parameters.Add(adoParameter);
            }

            foreach (var g in this.Data.Bindings.GroupBy(b => b.Field).Select(g => g.ToArray()))
            {
                ParameterBinding parameterBinding = g.OfType <ParameterBinding>().FirstOrDefault();
                ColumnBinding    columnBinding    = g.OfType <ColumnBinding>().FirstOrDefault();

                if (parameterBinding == null && columnBinding == null)
                {
                    throw new CommandException("ICommandBinding must be a ColumnBinding or ParameterBinding instance.");
                }

                IField field = columnBinding?.Field ?? parameterBinding.Field;

                FieldData fieldData = this.Map.Get(field);

                if (fieldData == null)
                {
                    fieldData = this.Map.Add(field);
                }

                if (columnBinding != null)
                {
                    this.headingMap[columnBinding.ColumnName] = fieldData;
                }
                else
                {
                    IDbDataParameter adoParameter = adoMap.TryGetValue(parameterBinding.ParameterName);

                    if (adoParameter == null)
                    {
                        adoParameter = ParameterHelper.CreateAdoParameter(adoCommand, new Parameter(parameterBinding.ParameterName, field: parameterBinding.Field));

                        this.SetParameterDirection(adoParameter, ParameterDirection.Output);

                        adoMap.Add(parameterBinding.ParameterName, adoParameter);
                        adoCommand.Parameters.Add(adoParameter);
                    }

                    fieldData.SetValue(adoParameter);

                    if (adoParameter.Direction == ParameterDirection.Input)
                    {
                        this.SetParameterDirection(adoParameter, ParameterDirection.InputOutput);
                    }
                }
            }
        }