private void InitParameters(Parse headerCells)
        {
            Dictionary <String, DbParameterAccessor> allParams =
                dbEnvironment.GetAllProcedureParameters(procedureName);

            columnAccessors = new ColumnAccessors();
            for (int i = 0; headerCells != null; i++, headerCells = headerCells.More)
            {
                String paramName = NameNormaliser.NormaliseName(headerCells.Text);
                try
                {
                    DbParameterAccessor accessor = DbParameterAccessor.CloneWithSameParameter(allParams[paramName]);
                    accessor.IsBoundToCheckOperation = BindingFactory.CheckIsImpliedBy(headerCells.Text);
                    // sql server quirk. if output parameter is used in an input column, then
                    // the param should be remapped to IN/OUT
                    if ((!accessor.IsBoundToCheckOperation) &&
                        accessor.DbParameter.Direction == ParameterDirection.Output)
                    {
                        accessor.DbParameter.Direction = ParameterDirection.InputOutput;
                    }
                    columnAccessors.Assign(paramName, accessor);
                    accessors.Add(accessor);
                }
                catch (KeyNotFoundException)
                {
                    Wrong(headerCells);
                    throw new ApplicationException("Cannot find parameter " + paramName);
                }
            }
        }
Пример #2
0
        // this method will initialise accessors array from the parameters that
        // really go into the insert command and columnAccessors for all columns
        private void InitParameters(Parse headerCells)
        {
            Dictionary <String, DbParameterAccessor> allParams =
                dbEnvironment.GetAllColumns(parameterTableType);

            columnAccessors = new ColumnAccessors();
            isOutputColumn  = new bool[headerCells.Size];
            var paramAccessors = new List <DbParameterAccessor>();

            for (int i = 0; headerCells != null; i++, headerCells = headerCells.More)
            {
                String paramName = NameNormaliser.NormaliseName(headerCells.Text);
                DbParameterAccessor currentColumn;
                try
                {
                    currentColumn = allParams[paramName];
                }
                catch (KeyNotFoundException)
                {
                    Wrong(headerCells);
                    throw new ApplicationException("Cannot find column " + paramName);
                }
                isOutputColumn[i] = BindingFactory.CheckIsImpliedBy(headerCells.Text);
                currentColumn.IsBoundToCheckOperation = isOutputColumn[i];
                columnAccessors.Assign(paramName, currentColumn);
                if (isOutputColumn[i])
                {
                    if (dbEnvironment.SupportsReturnOnInsert)
                    {
                        currentColumn.DbParameter.Direction = ParameterDirection.Output;
                        paramAccessors.Add(currentColumn);
                    }
                    else // don't add to paramAccessors
                    {
                        //columnAccessors.Assign(paramName, new IdRetrievalAccessor(dbEnvironment, currentColumn.DotNetType));
                        columnAccessors.Assign(paramName, new IdRetrievalAccessor(dbEnvironment, currentColumn.DotNetType, parameterTableType));
                    }
                }
                else // not output
                {
                    currentColumn.DbParameter.Direction = ParameterDirection.Input;
                    paramAccessors.Add(currentColumn);
                }

                table.Columns.Add(currentColumn.DbFieldName, currentColumn.DotNetType);
            }
            accessors = paramAccessors.ToArray();
        }