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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }