/// <summary>
        /// 处理带数据的元素
        /// </summary>
        /// <param name="sql">Insert语句</param>
        /// <param name="context">策略的上下文</param>
        protected void HandlingFieldsAddData(InsertSqlStatement sql, SqlBuildingContext context)
        {
            var excludeField = new List <InsertField>();

            foreach (InsertField insertField in sql.InsertFields.ChildCollection)
            {
                var insertCol = context.DataObject.Columns.FirstOrDefault(i => i.ColumnName == insertField.FieldName);
                if (insertCol == null)
                {
                    throw new Exception("Cannot find column: " + insertField.FieldName);
                }
                var insertElement = context.Node.Elements.FirstOrDefault(i => i.DataColumnID == insertCol.ID);
                if (insertElement == null)
                {
                    throw new Exception("Cannot find DomainObjectElement, DataColumnID: " + insertCol.ID);
                }
                if (!context.DataContext.GetCurrentDataContextItem(context.Node.ID).Data.ContainsKey(insertElement.ID))
                {
                    excludeField.Add(insertField);
                    continue;
                }

                var fieldValue = new InsertValue();

                fieldValue.DataType = Convert.ToInt32(insertElement.DataType);
                var value = context.DataContext.GetCurrentDataContextItem(context.Node.ID).Data[insertElement.ID];
                fieldValue.Value = ElementValueWrapper.ConvertElementValue(insertElement, value);
                sql.InsertValues.ChildCollection.Add(fieldValue);
            }

            if (excludeField != null && excludeField.Count > 0)
            {
                foreach (var field in excludeField)
                {
                    sql.InsertFields.ChildCollection.Remove(field);
                }
            }

            if (sql.InsertFields.ChildCollection.Count == 0)
            {
                throw new Exception(string.Format("数据访问服务-插入的字段为空, DomainModel:{0}, DomainObject:{1} ",
                                                  context.CommonObject.ID, context.Node.ID));
            }
            if (sql.InsertFields.ChildCollection.Count != sql.InsertValues.ChildCollection.Count)
            {
                throw new Exception(string.Format("数据访问服务-插入的字段与值个数不匹配, DomainModel:{0}, DomainObject:{1} ",
                                                  context.CommonObject.ID, context.Node.ID));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 对Insert类SQL语句进行参数处理
        /// </summary>
        /// <param name="sqlStatement">待处理的SQL语句</param>
        /// <param name="db">数据访问对象</param>
        /// <returns>处理后的参数数组</returns>
        private List <IDbDataParameter> ParameterHandlerForInsert(SqlStatement sqlStatement, ITeldDatabase db)
        {
            var insertSql  = sqlStatement as InsertSqlStatement;
            var parameters = new List <IDbDataParameter>(insertSql.InsertFields.ChildCollection.Count);

            for (int parameterIndex = 0; parameterIndex < insertSql.InsertFields.ChildCollection.Count; parameterIndex++)
            {
                InsertField insertField = insertSql.InsertFields.ChildCollection[parameterIndex] as InsertField;
                if (insertField == null)
                {
                    throw new Exception("ParameterHandlerForInsert.insertField, parameterIndex:" + parameterIndex);
                }
                InsertValue insertValue = insertSql.InsertValues.ChildCollection[parameterIndex] as InsertValue;
                if (insertValue == null)
                {
                    throw new Exception("ParameterHandlerForInsert.insertValue, parameterIndex:" + parameterIndex);
                }

                parameters.Add(ParameterHandler(db, insertValue, insertField));
            }

            return(parameters);
        }