diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs index 2ae462f1c..ba9ef9c8e 100644 --- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs +++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/DbMaintenance/MySqlDbMaintenance.cs @@ -34,7 +34,8 @@ namespace SqlSugar.MySqlConnector CASE WHEN is_nullable = 'YES' THEN true ELSE false END AS `IsNullable`, numeric_scale as Scale, - numeric_scale as DecimalDigits + numeric_scale as DecimalDigits, + LOCATE( 'unsigned',COLUMN_type ) >0 as IsUnsigned FROM Information_schema.columns where TABLE_NAME='{0}' and TABLE_SCHEMA=(select database()) ORDER BY ordinal_position"; return sql; @@ -274,6 +275,23 @@ namespace SqlSugar.MySqlConnector #endregion #region Methods + public override bool IsAnyColumnRemark(string columnName, string tableName) + { + var isAny=this.Context.DbMaintenance.GetColumnInfosByTableName(tableName, false) + .Any(it => it.ColumnDescription.HasValue() && it.DbColumnName.ToLower()==columnName.ToLower()); + return isAny; + } + public override bool AddColumnRemark(string columnName, string tableName, string description) + { + //base.AddColumnRemark(columnName, tableName, description); + var message= @"db.DbMaintenance.UpdateColumn(""tablename"", new DbColumnInfo() + {{ + DataType = ""VARCHAR(30) NOT NULL COMMENT 'xxxxx'"", + DbColumnName = ""columnname"" + }})" ; + Check.Exception(true,"MySql no support AddColumnRemark , use " + message); + return true; + } /// ///by current connection string /// diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs index 01e918d1e..5d652ec7b 100644 --- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs +++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlFastBuilder.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SqlSugar.MySqlConnector +namespace SqlSugar.MySqlConnector { public class MySqlFastBuilder:FastBuilder,IFastBuilder @@ -44,7 +44,7 @@ namespace SqlSugar.MySqlConnector TableName = dt.TableName, Local = true, }; - if (this.CharacterSet.HasValue()) + if (this.CharacterSet.HasValue()) { bulk.CharacterSet = this.CharacterSet; } @@ -58,7 +58,14 @@ namespace SqlSugar.MySqlConnector } catch (MySqlException ex) { - throw ex; + if (ex.Message == "The used command is not allowed with this MySQL version") + { + Check.ExceptionEasy("connection string add : AllowLoadLocalInfile=true", "BulkCopy MySql连接字符串需要添加 AllowLoadLocalInfile=true; 添加后如果还不行Mysql数据库执行一下 SET GLOBAL local_infile=1 "); + } + else + { + throw ex; + } } finally { diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs index 482a21885..c7bce8d2e 100644 --- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs +++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlInsertBuilder.cs @@ -27,7 +27,8 @@ namespace SqlSugar.MySqlConnector } } } - public override object FormatValue(object value) + int i = 0; + public object FormatValue(object value,string name) { var n = "N"; if (this.Context.CurrentConnectionConfig.MoreSettings != null && this.Context.CurrentConnectionConfig.MoreSettings.DisableNvarchar) @@ -44,9 +45,9 @@ namespace SqlSugar.MySqlConnector if (type == UtilConstants.DateType) { var date = value.ObjToDate(); - if (date < Convert.ToDateTime("1900-1-1")) + if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig)) { - date = Convert.ToDateTime("1900-1-1"); + date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig); } return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; } @@ -72,7 +73,10 @@ namespace SqlSugar.MySqlConnector } else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) { - return n+"'" + GetString(value).ToSqlFilter() + "'"; + ++i; + var parameterName = this.Builder.SqlParameterKeyWord + name + i; + this.Parameters.Add(new SugarParameter(parameterName, value)); + return parameterName; } else { @@ -102,6 +106,7 @@ namespace SqlSugar.MySqlConnector if (isSingle) { string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.SqlParameterKeyWord + it.DbColumnName)); + ActionMinDate(); return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString); } else @@ -115,7 +120,7 @@ namespace SqlSugar.MySqlConnector foreach (var item in groupList) { batchInsetrSql.Append("("); - insertColumns = string.Join(",", item.Select(it => FormatValue(it.Value))); + insertColumns = string.Join(",", item.Select(it => FormatValue(it.Value,it.PropertyName))); batchInsetrSql.Append(insertColumns); if (groupList.Last() == item) { diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs index 4c7d9132f..f4cb51c15 100644 --- a/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs +++ b/Src/Asp.Net/SqlSugar.MySqlConnector/MySql/SqlBuilder/MySqlUpdateBuilder.cs @@ -59,7 +59,7 @@ namespace SqlSugar.MySqlConnector { updateTable.Append(SqlTemplateBatchUnion); } - updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value),this.Builder.GetTranslationColumnName(it.DbColumnName))))); + updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value,it.PropertyName),this.Builder.GetTranslationColumnName(it.DbColumnName))))); ++i; } pageIndex++; @@ -89,7 +89,8 @@ namespace SqlSugar.MySqlConnector } return batchUpdateSql.ToString(); } - public override object FormatValue(object value) + int i = 0; + public object FormatValue(object value,string name) { var n = "N"; if (this.Context.CurrentConnectionConfig.MoreSettings != null&&this.Context.CurrentConnectionConfig.MoreSettings.DisableNvarchar) @@ -106,9 +107,9 @@ namespace SqlSugar.MySqlConnector if (type == UtilConstants.DateType) { var date = value.ObjToDate(); - if (date < Convert.ToDateTime("1900-1-1")) + if (date < UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig)) { - date = Convert.ToDateTime("1900-1-1"); + date = UtilMethods.GetMinDate(this.Context.CurrentConnectionConfig); } return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; } @@ -142,7 +143,10 @@ namespace SqlSugar.MySqlConnector } else if (type == UtilConstants.StringType || type == UtilConstants.ObjType) { - return n+"'" + GetString(value).ToSqlFilter() + "'"; + ++i; + var parameterName = this.Builder.SqlParameterKeyWord + name + i; + this.Parameters.Add(new SugarParameter(parameterName, value)); + return parameterName; } else { diff --git a/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilMethods.cs b/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilMethods.cs index 1ed5547d9..7c127a648 100644 --- a/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar.MySqlConnector/Tools/UtilMethods.cs @@ -16,7 +16,21 @@ namespace SqlSugar.MySqlConnector { public class UtilMethods { - + internal static DateTime GetMinDate(ConnectionConfig currentConnectionConfig) + { + if (currentConnectionConfig.MoreSettings == null) + { + return Convert.ToDateTime("1900-01-01"); + } + else if (currentConnectionConfig.MoreSettings.DbMinDate == null) + { + return Convert.ToDateTime("1900-01-01"); + } + else + { + return currentConnectionConfig.MoreSettings.DbMinDate.Value; + } + } internal static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime) { if (dateTime.Offset.Equals(TimeSpan.Zero))