internal static DbParameterAccessor[] SortAccessors(DbParameterAccessor[] accessors) { DbParameterAccessor[] sortedAccessors = (DbParameterAccessor[])accessors.Clone(); for (int i=0; i<sortedAccessors.Length-1; i++) for (int j=i+1; j<sortedAccessors.Length; j++) { if (sortedAccessors[i].Position > sortedAccessors[j].Position) { DbParameterAccessor x = sortedAccessors[i]; sortedAccessors[i] = sortedAccessors[j]; sortedAccessors[j] = x; } } return sortedAccessors; }
private void InitParameters(Parse headerCells) { Dictionary <String, DbParameterAccessor> allParams = dbEnvironment.GetAllColumns(tableName); columnAccessors = new ColumnAccessors(); IList <DbParameterAccessor> selectAccList = new List <DbParameterAccessor>(); IList <DbParameterAccessor> updateAccList = new List <DbParameterAccessor>(); for (int i = 0; headerCells != null; i++, headerCells = headerCells.More) { String paramName = NameNormaliser.NormaliseName(headerCells.Text); try { DbParameterAccessor acc = allParams[paramName]; acc.DbParameter.Direction = ParameterDirection.Input; // allow same column to be used in both sides: // remap update parameters to u_paramname and select to s_paramname acc = DbParameterAccessor.Clone(acc, dbEnvironment); if (headerCells.Text.EndsWith("=")) { acc.DbParameter.ParameterName = acc.DbParameter.ParameterName + "_u"; updateAccList.Add(acc); columnAccessors.Assign(paramName + "=", acc); } else { acc.DbParameter.ParameterName = acc.DbParameter.ParameterName + "_s"; selectAccList.Add(acc); columnAccessors.Assign(paramName, acc); } } catch (KeyNotFoundException) { Wrong(headerCells); throw new ApplicationException("Cannot find column for " + paramName); } } selectAccessors = new DbParameterAccessor[selectAccList.Count]; selectAccList.CopyTo(selectAccessors, 0); updateAccessors = new DbParameterAccessor[updateAccList.Count]; updateAccList.CopyTo(updateAccessors, 0); }