コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }