From cf43725b2db61f2c114bfc4e36124df4df35673a Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 12 Jan 2019 19:28:16 +0800 Subject: [PATCH] Update core --- .../Abstract/AdoProvider/AdoProvider.cs | 36 ++++++++++++ .../InsertableProvider/InsertableProvider.cs | 2 +- .../QueryableProvider/QueryableProvider.cs | 26 ++++++++- .../SqlBuilderProvider/QueryBuilder.cs | 11 +++- .../SqlSugar/Entities/ConditionalModel.cs | 1 + .../ResolveItems/BaseResolve.cs | 5 +- .../Subquery/Items/SubWhereIF.cs | 2 +- .../ExpressionsToSql/Subquery/SubTools.cs | 2 + .../SqlSugar/Infrastructure/ContextMethods.cs | 53 ++++++++++------- .../SqlSugar/OnlyCore/IDataExtensions.cs | 2 +- .../MySql/SqlBuilder/MySqlInsertBuilder.cs | 54 +++++++++++++++++- .../MySql/SqlBuilder/MySqlUpdateBuilder.cs | 53 ++++++++++++++++- .../SqlSeverTest/SqlSugar/SimpleClient.cs | 39 ++++++++++++- .../SqlSeverTest/SqlSugar/SqlSugar.csproj | 2 +- .../SqlSugar/Utilities/UtilMethods.cs | 2 +- .../SqlSeverTest/SqliteTest/Config.cs | 2 +- .../SqliteTest/DataBase/SqlSugar4xTest.sqlite | Bin 479232 -> 610304 bytes .../SqlSeverTest/SqliteTest/Demos/1_Query.cs | 1 + .../SqlSeverTest/SqliteTest/Demos/9_Aop.cs | 2 +- .../SqliteTest/Models/DataTestInfo2.cs | 3 +- 20 files changed, 259 insertions(+), 39 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs index cbd2aa738..d931e292d 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/AdoProvider/AdoProvider.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; @@ -284,6 +285,7 @@ namespace SqlSugar { try { + InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -313,6 +315,7 @@ namespace SqlSugar { try { + InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -341,6 +344,7 @@ namespace SqlSugar { try { + InitParameters(ref sql, parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -373,6 +377,7 @@ namespace SqlSugar { try { + InitParameters(ref sql,parameters); if (FormatSql != null) sql = FormatSql(sql); SetConnectionStart(sql); @@ -791,6 +796,37 @@ namespace SqlSugar { ErrorEvent(new SqlSugarException(this.Context,ex, sql, parameters)); } + private void InitParameters(ref string sql, SugarParameter[] parameters) + { + if (parameters.HasValue()) + { + foreach (var item in parameters) + { + if (item.Value != null) + { + var type = item.Value.GetType(); + if ((type != UtilConstants.ByteArrayType && type.IsArray) || type.FullName.IsCollectionsList()) + { + var newValues = new List(); + foreach (var inValute in item.Value as IEnumerable) + { + newValues.Add(inValute.ObjToString()); + } + if (newValues.IsNullOrEmpty()) + { + newValues.Add("-1"); + } + if (item.ParameterName.Substring(0, 1) == ":") + { + sql = sql.Replace("@"+item.ParameterName.Substring(1), newValues.ToArray().ToJoinSqlInVals()); + } + sql = sql.Replace(item.ParameterName, newValues.ToArray().ToJoinSqlInVals()); + item.Value = DBNull.Value; + } + } + } + } + } #endregion } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index e4387bb2f..933653229 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -462,7 +462,7 @@ namespace SqlSugar List result = new List(); var whereSql = string.Empty; List cons = new List(); - if (identity != null&&identity>0) + if (identity != null&&identity>0 && GetIdentityKeys().HasValue()) { var fieldName = GetIdentityKeys().Last(); cons.Add(new ConditionalModel() { ConditionalType=ConditionalType.Equal, FieldName= fieldName, FieldValue=identity.ToString() }); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 4cd1558bd..9b7320c6e 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -570,7 +570,16 @@ namespace SqlSugar } public virtual string ToJson() { - return this.Context.Utilities.SerializeObject(this.ToList()); + if (IsCache) + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + var result = CacheSchemeMain.GetOrCreate(cacheService, this.QueryBuilder, () => { return this.Context.Utilities.SerializeObject(this.ToList()); }, CacheTime, this.Context); + return result; + } + else + { + return this.Context.Utilities.SerializeObject(this.ToList()); + } } public virtual string ToJsonPage(int pageIndex, int pageSize) { @@ -586,7 +595,16 @@ namespace SqlSugar InitMapping(); var sqlObj = this.ToSql(); RestoreMapping(); - var result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray()); + DataTable result = null; + if (IsCache) + { + var cacheService = this.Context.CurrentConnectionConfig.ConfigureExternalServices.DataInfoCacheService; + result = CacheSchemeMain.GetOrCreate(cacheService, this.QueryBuilder, () => { return this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray()); }, CacheTime, this.Context); + } + else + { + result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray()); + } return result; } public virtual DataTable ToDataTablePage(int pageIndex, int pageSize) @@ -1298,6 +1316,10 @@ namespace SqlSugar var asyncContext = this.Context.Utilities.CopyContext(true); asyncContext.CurrentConnectionConfig.IsAutoCloseConnection = true; var asyncQueryable = asyncContext.Queryable().Select(string.Empty).WithCacheIF(IsCache, CacheTime); + if (this.MapperAction != null) + asyncQueryable.Mapper(MapperAction); + if (this.MapperActionWithCache != null) + asyncQueryable.Mapper(MapperActionWithCache); CopyQueryBuilder(asyncQueryable.QueryBuilder); return asyncQueryable; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 2ed0e0935..c9e51d298 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -395,8 +395,15 @@ namespace SqlSugar { var expression = this.SelectValue as Expression; var result = GetExpressionValue(expression, this.SelectType).GetResultString(); - this.SelectCacheKey = result; - return result; + if (result.Contains(".*") && this.IsSingle()) + { + return "*"; + } + else + { + this.SelectCacheKey = result; + return result; + } } public virtual string GetSelectValueByString() { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs index 9bdb8ca08..3d58da69e 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Entities/ConditionalModel.cs @@ -22,5 +22,6 @@ namespace SqlSugar public string FieldName { get; set; } public string FieldValue { get; set; } public ConditionalType ConditionalType { get; set; } + public Func FieldValueConvertFunc { get; set; } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 19a3e547b..66a3f8e53 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -337,7 +337,8 @@ namespace SqlSugar if (this.Context.Result.IsLockCurrentParameter == false) { var expression = ((UnaryExpression)item).Operand as MemberExpression; - if (expression.Expression == null) + var isDateTimeNow = ((UnaryExpression)item).Operand.ToString() == "DateTime.Now"; + if (expression.Expression == null&&!isDateTimeNow) { this.Context.Result.CurrentParameter = parameter; this.Context.Result.IsLockCurrentParameter = true; @@ -348,7 +349,7 @@ namespace SqlSugar this.Context.Result.Append(this.Context.GetAsString(asName, parameter.CommonTempData.ObjToString())); this.Context.Result.CurrentParameter = null; } - else if (expression.Expression is ConstantExpression) + else if (expression.Expression is ConstantExpression||isDateTimeNow) { string parameterName = this.Context.SqlParameterKeyWord + "constant" + this.Context.ParameterIndex; this.Context.ParameterIndex++; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhereIF.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhereIF.cs index f1d3b8623..1e266e1de 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhereIF.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/Items/SubWhereIF.cs @@ -50,7 +50,7 @@ namespace SqlSugar } var isWhere= Convert.ToBoolean(value); if (!Convert.ToBoolean(isWhere)) { - return ""; + return "WHERE 1=1 "; } var argExp = exp.Arguments[1]; var result = "WHERE " + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); ; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs index 5928d5719..8896c09c5 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Subquery/SubTools.cs @@ -48,6 +48,8 @@ namespace SqlSugar var newContext = context.GetCopyContext(); newContext.MappingColumns = context.MappingColumns; newContext.MappingTables = context.MappingTables; + newContext.InitMappingInfo = context.InitMappingInfo; + newContext.RefreshMapping = context.RefreshMapping; newContext.IgnoreComumnList = context.IgnoreComumnList; newContext.SqlFuncServices = context.SqlFuncServices; newContext.Resolve(item, type); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs index 546785882..5649f2ed7 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Infrastructure/ContextMethods.cs @@ -90,7 +90,7 @@ namespace SqlSugar /// /// /// - public Dictionary DataReaderToDictionary(IDataReader reader,Type type) + public Dictionary DataReaderToDictionary(IDataReader reader, Type type) { Dictionary result = new Dictionary(); for (int i = 0; i < reader.FieldCount; i++) @@ -98,7 +98,7 @@ namespace SqlSugar string name = reader.GetName(i); try { - name = this.Context.EntityMaintenance.GetPropertyName(name,type); + name = this.Context.EntityMaintenance.GetPropertyName(name, type); var addItem = reader.GetValue(i); if (addItem == DBNull.Value) addItem = null; @@ -129,7 +129,7 @@ namespace SqlSugar { while (reader.Read()) { - var readerValues = DataReaderToDictionary(reader,tType); + var readerValues = DataReaderToDictionary(reader, tType); var result = new Dictionary(); foreach (var item in classProperties) { @@ -143,7 +143,7 @@ namespace SqlSugar { if (readerValues.Any(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase))) { - var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues.First(it=>it.Key.Equals(name,StringComparison.CurrentCultureIgnoreCase)).Value; + var addValue = readerValues.ContainsKey(name) ? readerValues[name] : readerValues.First(it => it.Key.Equals(name, StringComparison.CurrentCultureIgnoreCase)).Value; if (addValue == DBNull.Value) { if (item.PropertyType.IsIn(UtilConstants.IntType, UtilConstants.DecType, UtilConstants.DobType, UtilConstants.ByteType)) @@ -207,13 +207,14 @@ namespace SqlSugar else { var key = typeName + "." + name; - var info = readerValues.Select(it=>it.Key).FirstOrDefault(it=>it.ToLower() == key.ToLower()); - if (info!=null) + var info = readerValues.Select(it => it.Key).FirstOrDefault(it => it.ToLower() == key.ToLower()); + if (info != null) { var addItem = readerValues[info]; if (addItem == DBNull.Value) addItem = null; - if (prop.PropertyType == UtilConstants.IntType) { + if (prop.PropertyType == UtilConstants.IntType) + { addItem = addItem.ObjToInt(); } result.Add(name, addItem); @@ -269,7 +270,7 @@ namespace SqlSugar public SqlSugarClient CopyContext(bool isCopyEvents = false) { var newClient = new SqlSugarClient(this.TranslateCopy(Context.CurrentConnectionConfig)); - newClient.CurrentConnectionConfig.ConfigureExternalServices=Context.CurrentConnectionConfig.ConfigureExternalServices; + newClient.CurrentConnectionConfig.ConfigureExternalServices = Context.CurrentConnectionConfig.ConfigureExternalServices; newClient.MappingColumns = this.TranslateCopy(Context.MappingColumns); newClient.MappingTables = this.TranslateCopy(Context.MappingTables); newClient.IgnoreColumns = this.TranslateCopy(Context.IgnoreColumns); @@ -349,7 +350,7 @@ namespace SqlSugar #endregion #region Query - public KeyValuePair ConditionalModelToSql(List models,int beginIndex=0) + public KeyValuePair ConditionalModelToSql(List models, int beginIndex = 0) { if (models.IsNullOrEmpty()) return new KeyValuePair(); StringBuilder builder = new StringBuilder(); @@ -360,21 +361,23 @@ namespace SqlSugar if (model is ConditionalModel) { var item = model as ConditionalModel; - var index = models.IndexOf(item)+ beginIndex; + var index = models.IndexOf(item) + beginIndex; var type = index == 0 ? "" : "AND"; - if (beginIndex > 0) { + if (beginIndex > 0) + { type = null; } string temp = " {0} {1} {2} {3} "; string parameterName = string.Format("{0}Conditional{1}{2}", sqlBuilder.SqlParameterKeyWord, item.FieldName, index); - if (parameterName.Contains(".")) { + if (parameterName.Contains(".")) + { parameterName = parameterName.Replace(".", "_"); } switch (item.ConditionalType) { case ConditionalType.Equal: builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "=", parameterName); - parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + parameters.Add(new SugarParameter(parameterName, GetFieldValue(item))); break; case ConditionalType.Like: builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName); @@ -382,19 +385,19 @@ namespace SqlSugar break; case ConditionalType.GreaterThan: builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">", parameterName); - parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + parameters.Add(new SugarParameter(parameterName, GetFieldValue(item))); break; case ConditionalType.GreaterThanOrEqual: builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), ">=", parameterName); - parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + parameters.Add(new SugarParameter(parameterName, GetFieldValue(item))); break; case ConditionalType.LessThan: builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<", parameterName); - parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + parameters.Add(new SugarParameter(parameterName, GetFieldValue(item))); break; case ConditionalType.LessThanOrEqual: builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName); - parameters.Add(new SugarParameter(parameterName, item.FieldValue)); + parameters.Add(new SugarParameter(parameterName, GetFieldValue(item))); break; case ConditionalType.In: if (item.FieldValue == null) item.FieldValue = string.Empty; @@ -459,8 +462,9 @@ namespace SqlSugar } List conModels = new List(); conModels.Add(con.Value); - var childSqlInfo = ConditionalModelToSql(conModels,1000*(1+index)); - if (!isFirst) { + var childSqlInfo = ConditionalModelToSql(conModels, 1000 * (1 + index)); + if (!isFirst) + { builder.AppendFormat(" {0} ", con.Key.ToString().ToUpper()); } @@ -470,7 +474,8 @@ namespace SqlSugar { builder.Append(" ) "); } - else { + else + { } } @@ -479,6 +484,14 @@ namespace SqlSugar } return new KeyValuePair(builder.ToString(), parameters.ToArray()); } + + private static object GetFieldValue(ConditionalModel item) + { + if (item.FieldValueConvertFunc != null) + return item.FieldValueConvertFunc(item.FieldValue); + else + return item.FieldValue; + } #endregion } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs index 4af142208..5f7c0ae3e 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/OnlyCore/IDataExtensions.cs @@ -20,7 +20,7 @@ namespace SqlSugar var name = parameter.ParameterName; if (!sql.Contains(name) && Regex.IsMatch(sql, "(" + name + "$)" + "|(" + name + @"[ ,\,])", RegexOptions.IgnoreCase)) { - parameter.ParameterName = Regex.Match(sql, "(" + name + "$)" + "|(" + name + @"[ ,\,])", RegexOptions.IgnoreCase).Value; + parameter.ParameterName = Regex.Match(sql, "(" + name + "$)" + "|(" + name + @"[ ,\,])", RegexOptions.IgnoreCase).Value.Trim(); } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs index d75fa0804..405a08f36 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs @@ -1,4 +1,6 @@ -namespace SqlSugar +using System; + +namespace SqlSugar { public class MySqlInsertBuilder : InsertBuilder { @@ -23,5 +25,55 @@ } } } + public override object FormatValue(object value) + { + if (value == null) + { + return "NULL"; + } + else + { + var type = value.GetType(); + if (type == UtilConstants.DateType) + { + var date = value.ObjToDate(); + if (date < Convert.ToDateTime("1900-1-1")) + { + date = Convert.ToDateTime("1900-1-1"); + } + return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; + } + else if (type == UtilConstants.ByteArrayType) + { + string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", ""); + return bytesString; + } + else if (type.IsEnum()) + { + return Convert.ToInt64(value); + } + else if (type == UtilConstants.BoolType) + { + return value.ObjToBool() ? "1" : "0"; + } + else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) + { + return "N'" + GetString(value).ToSqlFilter() + "'"; + } + else + { + return "N'" + GetString(value) + "'"; + } + } + } + private string GetString(object value) + { + var result = value.ToString(); + if (result.HasValue() && result.Contains("\\")) + { + result = result.Replace("\\", "\\\\"); + } + return result; + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs index c8efe1671..67950cba3 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text; @@ -87,5 +88,55 @@ namespace SqlSugar } return batchUpdateSql.ToString(); } + public override object FormatValue(object value) + { + if (value == null) + { + return "NULL"; + } + else + { + var type = value.GetType(); + if (type == UtilConstants.DateType) + { + var date = value.ObjToDate(); + if (date < Convert.ToDateTime("1900-1-1")) + { + date = Convert.ToDateTime("1900-1-1"); + } + return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; + } + else if (type == UtilConstants.ByteArrayType) + { + string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", ""); + return bytesString; + } + else if (type.IsEnum()) + { + return Convert.ToInt64(value); + } + else if (type == UtilConstants.BoolType) + { + return value.ObjToBool() ? "1" : "0"; + } + else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) + { + return "N'" + GetString(value).ToSqlFilter() + "'"; + } + else + { + return "N'" + GetString(value) + "'"; + } + } + } + private string GetString(object value) + { + var result = value.ToString(); + if (result.HasValue() && result.Contains("\\")) + { + result = result.Replace("\\", "\\\\"); + } + return result; + } } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs index cafe82786..899ccf5a9 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs @@ -131,6 +131,39 @@ namespace SqlSugar this.Context = context; } + public ISugarQueryable AsQueryable() + { + return Context.Queryable(); + } + public IInsertable AsInsertable(T insertObj) + { + return Context.Insertable(insertObj); + } + public IInsertable AsInsertable(T[] insertObjs) + { + return Context.Insertable(insertObjs); + } + public IInsertable AsInsertable(List insertObjs) + { + return Context.Insertable(insertObjs); + } + public IUpdateable AsUpdateable(T updateObj) + { + return Context.Updateable(updateObj); + } + public IUpdateable AsUpdateable(T[] updateObjs) + { + return Context.Updateable(updateObjs); + } + public IUpdateable AsUpdateable(List updateObjs) + { + return Context.Updateable(updateObjs); + } + public IDeleteable AsDeleteable() + { + return Context.Deleteable(); + } + public T GetById(dynamic id) { return Context.Queryable().InSingle(id); @@ -154,7 +187,7 @@ namespace SqlSugar page.PageCount = count; return result; } - public List GetPageList(Expression> whereExpression, PageModel page, Expression> orderByExpression = null, OrderByType orderByType = OrderByType.Asc) + public List GetPageList(Expression> whereExpression, PageModel page, Expression> orderByExpression = null, OrderByType orderByType = OrderByType.Asc) { int count = 0; var result = Context.Queryable().OrderByIF(orderByExpression != null, orderByExpression, orderByType).Where(whereExpression).ToPageList(page.PageIndex, page.PageSize, ref count); @@ -168,7 +201,7 @@ namespace SqlSugar page.PageCount = count; return result; } - public List GetPageList(List conditionalList, PageModel page, Expression> orderByExpression = null, OrderByType orderByType = OrderByType.Asc) + public List GetPageList(List conditionalList, PageModel page, Expression> orderByExpression = null, OrderByType orderByType = OrderByType.Asc) { int count = 0; var result = Context.Queryable().OrderByIF(orderByExpression != null, orderByExpression, orderByType).Where(conditionalList).ToPageList(page.PageIndex, page.PageSize, ref count); @@ -205,7 +238,7 @@ namespace SqlSugar { return this.Context.Updateable(updateObj).ExecuteCommand() > 0; } - public bool UpdateRange(T [] updateObjs) + public bool UpdateRange(T[] updateObjs) { return this.Context.Updateable(updateObjs).ExecuteCommand() > 0; } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj index 497624c72..cad2ae8fd 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugar.csproj @@ -11,7 +11,7 @@ - + diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs index dc20c7321..031ccfa85 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Utilities/UtilMethods.cs @@ -78,7 +78,7 @@ namespace SqlSugar //Compatible with.NET CORE parameters case var name = parameter.ParameterName; string newName = name +append+ addIndex; - appendSql = appendSql.Replace(name, newName); + appendSql =Regex.Replace(appendSql,name,newName,RegexOptions.IgnoreCase); parameter.ParameterName = newName; } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Config.cs b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Config.cs index ee581cb81..8be4914d7 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Config.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Config.cs @@ -8,6 +8,6 @@ namespace OrmTest { public class Config { - public static string ConnectionString = @"DataSource=F:\GIT\SqlSugar\Src\Asp.NetCore2\SqlSeverTest\SqliteTest\DataBase\SqlSugar4xTest.sqlite"; + public static string ConnectionString = @"DataSource=F:\MyOpenSource\SqlSugar4.XNew\SqlSugar\Src\Asp.NetCore2\SqlSeverTest\SqliteTest\DataBase\SqlSugar4xTest.sqlite"; } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/DataBase/SqlSugar4xTest.sqlite b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/DataBase/SqlSugar4xTest.sqlite index ff27b1f997ea0eb7bac353e7ba89ffb1dbb89e53..314e685f967dbf300583631bc62136fe68cd2ece 100644 GIT binary patch literal 610304 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 O0ruB4B>#hK@&5yVc}GtG literal 479232 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"select 'a'"); var t2 = db.Ado.GetInt("select 1"); var t3 = db.Ado.GetDataTable("select 1 as id"); + var t4= db.Ado.GetDataTable("select @id id",new { ID=1}); db.Ado.CommitTran(); //more //db.Ado.GetXXX... diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Demos/9_Aop.cs b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Demos/9_Aop.cs index f80c4507f..bf75e3347 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Demos/9_Aop.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Demos/9_Aop.cs @@ -12,7 +12,7 @@ namespace OrmTest.Demo public static void Init() { - SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.Sqlite, IsAutoCloseConnection = true }); + SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { InitKeyType= InitKeyType.Attribute,ConnectionString = Config.ConnectionString, DbType = DbType.Sqlite, IsAutoCloseConnection = true }); db.Aop.OnLogExecuted = (sql, pars) => diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Models/DataTestInfo2.cs b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Models/DataTestInfo2.cs index 8f425a4c1..e64f92ab4 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Models/DataTestInfo2.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqliteTest/Models/DataTestInfo2.cs @@ -16,7 +16,8 @@ namespace OrmTest.Models /// Desc: /// Default: /// Nullable:False - /// + /// + [SqlSugar.SugarColumn(IsPrimaryKey =true)] public Guid PK {get;set;} ///