Ejemplo n.º 1
0
        private List <IDbDataParameter> CreateParameters(ITeldDatabase db, SqlStatement sqlStatement, List <IDbDataParameter> parameters)
        {
            if (sqlStatement is InsertSqlStatement)
            {
                parameters = ParameterHandlerForInsert(sqlStatement, db);
            }

            else if (sqlStatement is UpdateSqlStatement)
            {
                parameters = ParameterHandlerForUpdate(sqlStatement, db);
            }
            else if (sqlStatement is DeleteSqlStatement)
            {
                parameters = ParameterHandlerForDelete(sqlStatement, db);
            }

            return(parameters);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 处理特殊数据类型参数
        /// </summary>
        /// <param name="db">数据访问对象</param>
        /// <param name="parameters">参数列表</param>
        /// <param name="fieldValue">字段值</param>
        /// <param name="field">待处理字段</param>
        private IDbDataParameter ParameterHandler(ITeldDatabase db, FieldValue fieldValue, Field field)
        {
            IDbDataParameter parameter = null;

            switch ((ElementDataType)fieldValue.DataType)
            {
            case ElementDataType.DateTime:
            case ElementDataType.Date:
                parameter = db.MakeInParam(field.FieldName, DbDataType.DateTime, fieldValue.Value);
                break;

            case ElementDataType.Binary:
            {
                byte[] byteAry = fieldValue.Value as Byte[];
                parameter = db.MakeInParam(field.FieldName, DbDataType.Blob, fieldValue.Value);
                break;
            }

            case ElementDataType.Boolean:
            case ElementDataType.Integer:
                parameter = db.MakeInParam(field.FieldName, DbDataType.Int, fieldValue.Value);
                break;

            case ElementDataType.Decimal:
                parameter = db.MakeInParam(field.FieldName, DbDataType.Decimal, fieldValue.Value);
                break;

            case ElementDataType.String:
                parameter = db.MakeInParam(field.FieldName, DbDataType.VarChar, fieldValue.Value);
                break;

            case ElementDataType.Text:
                parameter = db.MakeInParam(field.FieldName, DbDataType.Clob, fieldValue.Value);
                break;

            default:
                throw new NotSupportedException(((ElementDataType)fieldValue.DataType).ToString());
            }

            return(parameter);
        }
Ejemplo n.º 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);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 对Select类SQL语句进行参数处理
        /// </summary>
        /// <param name="sqlStatement">待处理的SQL语句</param>
        /// <param name="db">数据访问对象</param>
        /// <returns>处理后的参数数组</returns>
        private List <IDbDataParameter> ParameterHandlerForDelete(SqlStatement sqlStatement, ITeldDatabase db)
        {
            var deleteSql  = sqlStatement as DeleteSqlStatement;
            var parameters = new List <IDbDataParameter>();

            if (deleteSql.SubQuerySql != null)
            {
                for (int parameterIndex = 0; parameterIndex < deleteSql.SubQuerySql.Condition.ChildCollection.Count; parameterIndex++)
                {
                    var filterCondition = deleteSql.SubQuerySql.Condition.ChildCollection[parameterIndex];
                    if (filterCondition is SqlPrimaryKey)
                    {
                        foreach (var keyField in filterCondition.ChildCollection)
                        {
                            SqlPrimaryKeyField pkField = keyField as SqlPrimaryKeyField;
                            if (pkField == null)
                            {
                                throw new Exception("ParameterHandlerForDelete.PkField, parameterIndex:" + parameterIndex);
                            }

                            parameters.Add(ParameterHandler(db, pkField.Value, pkField));
                        }
                    }
                }
            }
            else
            {
                for (int parameterIndex = 0; parameterIndex < deleteSql.Conditions.ChildCollection.Count; parameterIndex++)
                {
                    var filterCondition = deleteSql.Conditions.ChildCollection[parameterIndex];
                    if (filterCondition is SqlPrimaryKey)
                    {
                        foreach (var keyField in filterCondition.ChildCollection)
                        {
                            SqlPrimaryKeyField pkField = keyField as SqlPrimaryKeyField;
                            if (pkField == null)
                            {
                                throw new Exception("ParameterHandlerForDelete.PkField, parameterIndex:" + parameterIndex);
                            }

                            parameters.Add(ParameterHandler(db, pkField.Value, pkField));
                        }
                    }
                }
            }

            return(parameters);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 对Select类SQL语句进行参数处理
        /// </summary>
        /// <param name="sqlStatement">待处理的SQL语句</param>
        /// <param name="db">数据访问对象</param>
        /// <returns>处理后的参数数组</returns>
        private List <IDbDataParameter> ParameterHandlerForSelect(SqlStatement sqlStatement, ITeldDatabase db)
        {
            var selectSql  = sqlStatement as SelectSqlStatement;
            var parameters = new List <IDbDataParameter>(selectSql.FilterCondition.ChildCollection.Count);

            for (int parameterIndex = 0; parameterIndex < selectSql.FilterCondition.ChildCollection.Count; parameterIndex++)
            {
                var filterCondition = selectSql.FilterCondition.ChildCollection[parameterIndex];
                if (filterCondition is SqlPrimaryKey)
                {
                    foreach (var keyField in filterCondition.ChildCollection)
                    {
                        SqlPrimaryKeyField pkField = keyField as SqlPrimaryKeyField;
                        if (pkField == null)
                        {
                            throw new Exception("ParameterHandlerForUpdate.updateField, parameterIndex:" + parameterIndex);
                        }

                        parameters.Add(ParameterHandler(db, pkField.Value, pkField));
                    }
                }
            }

            return(parameters);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 对Update类SQL语句进行参数处理
        /// </summary>
        /// <param name="sqlStatement">待处理的SQL语句</param>
        /// <param name="db">数据访问对象</param>
        /// <returns>处理后的参数数组</returns>
        private List <IDbDataParameter> ParameterHandlerForUpdate(SqlStatement sqlStatement, ITeldDatabase db)
        {
            var updateSql  = sqlStatement as UpdateSqlStatement;
            var parameters = new List <IDbDataParameter>(updateSql.UpdateFields.ChildCollection.Count);

            for (int parameterIndex = 0; parameterIndex < updateSql.UpdateFields.ChildCollection.Count; parameterIndex++)
            {
                UpdateField updateField = updateSql.UpdateFields.ChildCollection[parameterIndex] as UpdateField;
                if (updateField == null)
                {
                    throw new Exception("ParameterHandlerForUpdate.updateField, parameterIndex:" + parameterIndex);
                }

                FieldValue feildValue = updateSql.UpdateValues.ChildCollection[parameterIndex] as FieldValue;
                if (feildValue == null)
                {
                    throw new Exception("ParameterHandlerForUpdate.feildValue, parameterIndex:" + parameterIndex);
                }

                parameters.Add(ParameterHandler(db, feildValue, updateField));
            }

            return(parameters);
        }