/// <summary>
        /// 将SQL语句中最后修改时间和创建时间字段值替换为获取数据库时间函数。
        /// </summary>
        /// <param name="insertFieldList">插入的字段</param>
        /// <param name="insertValueList">插入的字段值</param>
        /// <returns>替换最后修改时间和创建时间后的SQL语句</returns>
        private string GetFieldValueClause(InsertFieldList insertFieldList, InsertValueList insertValueList)
        {
            StringBuilder      insertFields = new StringBuilder();
            StringBuilder      insertValues = new StringBuilder();
            List <InsertField> removeFields = new List <InsertField>();
            List <SqlElement>  removeValues = new List <SqlElement>();

            for (int i = 0; i < insertValueList.ChildCollection.Count; i++)
            {
                InsertField field = insertFieldList.ChildCollection[i] as InsertField;
                string      val   = ((InsertValue)insertValueList.ChildCollection[i]).Value as string;
                if (val != null)
                {
                    //将最后修改时间和创建时间两个字段的值替换为获取数据库时间的方法
                    if (val == SQLBuilderUtils.CREATETIME || val == SQLBuilderUtils.LASTCHANGEDTIME)
                    {
                        insertFields.AppendFormat("{0},", field.FieldName);
                        removeFields.Add(field);
                        removeValues.Add(insertValueList.ChildCollection[i]);
                        insertValues.AppendFormat("{0},", SQLBuilderUtils.GetReallyDbDateTime());
                    }
                    else
                    {
                        insertFields.AppendFormat("{0},", field.FieldName);
                        insertValues.AppendFormat(":{0},", field.FieldName);
                    }
                }
                //对于一些如Byte[]类型的参数,无法转换为string类型,将其直接加到insertFields和insertValues中
                else
                {
                    insertFields.AppendFormat("{0},", field.FieldName);
                    insertValues.AppendFormat(":{0},", field.FieldName);
                }
            }

            //最后修改时间和创建时间两个字段已完成参数替换,因此将它们从insertFieldList中删除
            foreach (var field in removeFields)
            {
                insertFieldList.ChildCollection.Remove(field);
            }
            //最后修改时间和创建时间两个字段已完成参数替换,因此将它们从insertValueList中删除
            foreach (var value in removeValues)
            {
                insertValueList.ChildCollection.Remove(value);
            }
            //去换字符串中最后的那个“,”
            if (insertFields.ToString().EndsWith(","))
            {
                insertFields.Remove(insertFields.Length - 1, 1);
                insertValues.Remove(insertValues.Length - 1, 1);
            }

            //此时返回的string中有最后修改时间和创建时间两个字段和值,
            //因为它们没有在insertFields和insertValues中被删除
            return(string.Format("({0})VALUES({1})", insertFields, insertValues));
        }
Beispiel #2
0
        /// <summary>
        /// 根据SQLDOM元素类型初始化SQLDOM元素对象
        /// </summary>
        /// <param name="sqlElementType">SQLDOM元素类型</param>
        /// <returns>SQLDOM元素对象</returns>
        public static SqlElement GetSQLElement(int sqlElementType)
        {
            SqlElement     element = null;
            SqlElementType type    = (SqlElementType)sqlElementType;

            switch (type)
            {
            case SqlElementType.InsertField:
                element = new InsertField();
                break;

            case SqlElementType.SqlPrimaryKeyField:
                element = new SqlPrimaryKeyField();
                break;

            case SqlElementType.SelectListField:
                element = new SelectListField();
                break;

            case SqlElementType.UpdateField:
                element = new UpdateField();
                break;

            case SqlElementType.From:
                element = new From();
                break;

            case SqlElementType.FromItem:
                element = new FromItem();
                break;

            case SqlElementType.JoinCondition:
                element = new JoinConditionStatement();
                break;

            case SqlElementType.OrderByCondition:
                element = new ConditionStatement();
                break;

            case SqlElementType.FilterCondition:
                element = new ConditionStatement();
                break;

            case SqlElementType.UnKnown:
                break;
            }

            return(element);
        }
Beispiel #3
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);
        }