diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/CodeFirst/MySqlCodeFirst.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/CodeFirst/MySqlCodeFirst.cs index 32fa5fefa..74d702195 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/CodeFirst/MySqlCodeFirst.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/CodeFirst/MySqlCodeFirst.cs @@ -81,5 +81,33 @@ namespace SqlSugar.MySqlConnector { return EntityColumnToDbColumn(entity,dbTableName,item); } + + protected override void GetDbType(EntityColumnInfo item, Type propertyType, DbColumnInfo result) + { + if (!string.IsNullOrEmpty(item.DataType)) + { + result.DataType = item.DataType; + } + else if (propertyType.IsEnum()) + { + result.DataType = this.Context.Ado.DbBind.GetDbTypeName(item.Length > 9 ? UtilConstants.LongType.Name : UtilConstants.IntType.Name); + } + else + { + var name = GetType(propertyType.Name); + if (name == "Boolean") + { + result.DataType = "tinyint"; + result.Length = 1; + result.Scale = 0; + result.DecimalDigits = 0; + } + else + { + result.DataType = this.Context.Ado.DbBind.GetDbTypeName(name); + } + } + } + } } diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs index 2b5a0ec8d..10237f2a9 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/DbMaintenance/MySqlDbMaintenance.cs @@ -275,6 +275,25 @@ namespace SqlSugar.MySqlConnector #endregion #region Methods + public override bool IsAnyTable(string tableName, bool isCache = true) + { + try + { + return base.IsAnyTable(tableName, isCache); + } + catch (Exception ex) + { + if (SugarCompatible.IsFramework && ex.Message == "Invalid attempt to Read when reader is closed.") + { + Check.ExceptionEasy($"To upgrade the MySql.Data. Error:{ex.Message}", $" 请先升级MySql.Data 。 详细错误:{ex.Message}"); + return true; + } + else + { + throw; + } + } + } public override bool IsAnyColumnRemark(string columnName, string tableName) { var isAny=this.Context.DbMaintenance.GetColumnInfosByTableName(tableName, false) @@ -299,6 +318,12 @@ namespace SqlSugar.MySqlConnector /// public override bool CreateDatabase(string databaseName, string databaseDirectory = null) { + + if (this.Context.Ado.IsValidConnection()) + { + return true; + } + if (databaseDirectory != null) { if (!FileHelper.IsExistDirectory(databaseDirectory)) @@ -386,6 +411,10 @@ namespace SqlSugar.MySqlConnector string primaryKey = null; string identity = item.IsIdentity ? this.CreateTableIdentity : null; string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName), dataType, dataSize, nullType, primaryKey, identity); + if (!string.IsNullOrEmpty(item.ColumnDescription)) + { + addItem += " COMMENT '"+item.ColumnDescription.ToSqlFilter()+"' "; + } columnArray.Add(addItem); } string tableString = string.Format(this.CreateTableSql, this.SqlBuilder.GetTranslationTableName(tableName), string.Join(",\r\n", columnArray)); diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlBlukCopy.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlBlukCopy.cs index a72728b68..f89eca7c2 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlBlukCopy.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlBlukCopy.cs @@ -1,4 +1,4 @@ -using MySqlConnector; +using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; @@ -131,7 +131,7 @@ namespace SqlSugar.MySqlConnector { if (this.Chara == null) { - return "UTF8"; + return "utf8mb4"; } else { @@ -170,7 +170,14 @@ namespace SqlSugar.MySqlConnector } else if (colum.DataType == typeof(bool)) { - sb.Append(row[colum].ObjToBool() ? 1 : 0); + if (row[colum] == DBNull.Value) + { + sb.Append("NULL"); + } + else + { + sb.Append(row[colum].ObjToBool() ? 1 : 0); + } } else if (colum.DataType == UtilConstants.DateType&& row[colum] != null && row[colum] != DBNull.Value) { diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs index 64c130407..f79fa01f5 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlExpressionContext.cs @@ -72,6 +72,10 @@ namespace SqlSugar.MySqlConnector var parameter = model.Args[0]; var parameter2 = model.Args[1]; var parameter3 = model.Args[2]; + if (parameter3.MemberValue.ObjToString() == DateType.Weekday.ObjToString()) + { + parameter3.MemberValue = "Week"; + } return string.Format(" (TIMESTAMPDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberValue); } @@ -173,5 +177,36 @@ namespace SqlSugar.MySqlConnector { return string.Format("instr ({0},{1})", model.Args[0].MemberName, model.Args[1].MemberName); } + + public override string JsonField(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter1 = model.Args[1]; + //var parameter2 = model.Args[2]; + //var parameter3= model.Args[3]; + var result = GetJson(parameter.MemberName, parameter1.MemberValue, model.Args.Count() == 2); + if (model.Args.Count > 2) + { + result = GetJson(result, model.Args[2].MemberValue, model.Args.Count() == 3); + } + if (model.Args.Count > 3) + { + result = GetJson(result, model.Args[3].MemberValue, model.Args.Count() == 4); + } + if (model.Args.Count > 4) + { + result = GetJson(result, model.Args[4].MemberValue, model.Args.Count() == 5); + } + if (model.Args.Count > 5) + { + result = GetJson(result, model.Args[5].MemberValue, model.Args.Count() == 6); + } + return result; + } + + private string GetJson(object memberName1, object memberName2, bool isLast) + { + return $"{memberName1}->\"$.{memberName2}\""; + } } } diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs index 5d652ec7b..ddd0aa9c1 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlFastBuilder.cs @@ -17,7 +17,7 @@ namespace SqlSugar.MySqlConnector public async Task ExecuteBulkCopyAsync(DataTable dt) { - var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "failFiles"); + var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bulkcopyfiles"); DirectoryInfo dir = new DirectoryInfo(dllPath); if (!dir.Exists) { @@ -34,7 +34,7 @@ namespace SqlSugar.MySqlConnector // IsolationLevel.Parse MySqlBulkLoader bulk = new MySqlBulkLoader(conn) { - CharacterSet = "UTF8", + CharacterSet = "utf8mb4", FieldTerminator = ",", FieldQuotationCharacter = '"', EscapeCharacter = '"', diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlInsertBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlInsertBuilder.cs index 5fe8d0b44..532f5e9e6 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlInsertBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlInsertBuilder.cs @@ -73,7 +73,7 @@ namespace SqlSugar.MySqlConnector else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) { ++i; - var parameterName = this.Builder.SqlParameterKeyWord + name + i; + var parameterName = this.Builder.SqlParameterKeyWord + name +"_"+ i; this.Parameters.Add(new SugarParameter(parameterName, value)); return parameterName; } diff --git a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlUpdateBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlUpdateBuilder.cs index 5d95fe171..2f6968a2b 100644 --- a/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlUpdateBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MySqlConnectorCore/MySql/SqlBuilder/MySqlUpdateBuilder.cs @@ -143,7 +143,7 @@ namespace SqlSugar.MySqlConnector else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) { ++i; - var parameterName = this.Builder.SqlParameterKeyWord + name + i; + var parameterName = this.Builder.SqlParameterKeyWord + name +"_"+ i; this.Parameters.Add(new SugarParameter(parameterName, value)); return parameterName; }