protected override void GenerateSelectSql_Where_Item(StringBuilder sb, IDataParameterCollection parameters, ref int parameterCounter, IConditionExpression conditionExpression, SqlColumn sqlColumn, bool includeTableNameAlias, IMappingProvider mappingProvider) { if (conditionExpression.ConditionOperator == ConditionOperator.FullTextLike || conditionExpression.ConditionOperator == ConditionOperator.NotFullTextLike) { //sql server 全文索引总是contains //if (string.IsNullOrWhiteSpace(sqlColumn.Column.FullTextSearch)) //{ // throw ExceptionFactory.FullTextSearchNotSupported(sqlColumn.Column.PropertyAdapter.PropertyName); //} string fulltextSearch = (sqlColumn.Column.FullTextSearch + "").ToLower(); if (string.IsNullOrWhiteSpace(fulltextSearch)) { fulltextSearch = "contains"; } string tag = conditionExpression.ConditionOperator == ConditionOperator.FullTextLike ? "" : " not "; switch (fulltextSearch) { case "contains": sb.Append(tag); sb.Append("contains("); sb.Append(sqlColumn.TableAliasAndColumn); sb.Append(","); sb.Append(CreateParameterNameInStatement(parameterCounter)); sb.Append(")"); break; default: //function({column},{parameter},1)>0 string s = fulltextSearch.Replace("{column}", sqlColumn.TableAliasAndColumn); s = s.Replace("{parameter}", CreateParameterNameInStatement(parameterCounter)); sb.Append(s); break; } AddParameter(parameters, ref parameterCounter, conditionExpression.ConditionValue, sqlColumn.Column.PropertyType, sqlColumn.Column.Size); } else if (conditionExpression.ConditionOperator == ConditionOperator.Equal) { SqlServerColumn sqlserverColumn = (SqlServerColumn)sqlColumn.Column; if (sqlserverColumn.IsNText) { sb.Append(sqlColumn.TableAliasAndColumn); if (conditionExpression.ConditionValue == null) { sb.Append(" is null"); } else { sb.Append(" like "); sb.Append(CreateParameterNameInStatement(parameterCounter)); AddParameter(parameters, ref parameterCounter, conditionExpression.ConditionValue, sqlColumn.Column.PropertyType, sqlColumn.Column.Size); } } else { base.GenerateSelectSql_Where_Item(sb, parameters, ref parameterCounter, conditionExpression, sqlColumn, includeTableNameAlias, mappingProvider); } } else { base.GenerateSelectSql_Where_Item(sb, parameters, ref parameterCounter, conditionExpression, sqlColumn, includeTableNameAlias, mappingProvider); } }
public override int Insert(IDbHelper db, IMappingProvider mappingProvider, IDictionary <object, string> tableMapping, object entityType, IDictionary <string, object> inserts, IDictionary <string, object> returns) { ITable table = mappingProvider.GetTable(entityType); StringBuilder sb = new StringBuilder(); SqlCommand command = new SqlCommand(); int parameterCounter = 0; StringBuilder sbValues = new StringBuilder(); Dictionary <string, string> returnColumns = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); //属性名是键,sql参数名是值 string tableName = GetTableName(entityType, mappingProvider, tableMapping); sb.Append("insert into "); sb.Append(tableName); sb.Append(" ("); int index = 0; foreach (KeyValuePair <string, object> kv in inserts) { var column = table.Columns[kv.Key]; if (column.InsertBehavior.Generate) { if (index > 0) { sb.Append(","); sbValues.Append(","); } index++; sb.Append(column.ColumnName); //sbValues if (column.InsertBehavior.ValueBehavior == ValueBehavior.UseValueExpression) { sbValues.Append(column.InsertBehavior.ValueExpression); } else { sbValues.Append(CreateParameterName(parameterCounter)); //object propertyValue = column.PropertyAdapter.GetValue(entity); //Validate(column, propertyValue);//验证如:检查字符串长度,是否为null AddParameter(command.Parameters, ref parameterCounter, kv.Value, column.PropertyType, column.Size); } } } sb.Append(") values ("); sb.Append(sbValues); sb.Append(")"); foreach (string propertyName in table.PrimaryProperties) { SqlServerColumn column = (SqlServerColumn)table.Columns[propertyName]; //取回主键值 ,本版本只支持主键值的取回 if (column.IsIdentity && column.ReturnAfterInsert) { string pname = CreateParameterName(parameterCounter); returnColumns.Add(propertyName, pname); sb.Append(";set "); sb.Append(CreateParameterName(parameterCounter)); sb.Append("=SCOPE_Identity()"); var parameter = (SqlParameter)AddParameter(command.Parameters, ref parameterCounter, null, column.PropertyType, column.Size); parameter.Direction = ParameterDirection.Output; } } command.CommandText = sb.ToString(); command.CommandType = CommandType.Text; //执行sql int returnCount = db.ExecuteNonQuery(command); //read return value foreach (KeyValuePair <string, string> item in returnColumns) { object objValue = command.Parameters[item.Value].Value; //GetCommandValue(cmd, pName); returns.Add(item.Key, ConvertDbValue(objValue, table.Columns[item.Key].PropertyType)); //returns.Add(item.Key, objValue); //item.Value.PropertyAdapter.SetValue(entity, ConvertDbValue(objValue, item.Value.PropertyAdapter.PropertyType.Type)); } return(returnCount); }