diff --git a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml index bf9e6d4d..a21af7db 100644 --- a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml +++ b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml @@ -104,6 +104,41 @@ 班期信息 + + + 库位 + + + + + 工厂 + + + + + 物料号 + + + + + 条码号 + + + + + 创建时间 + + + + + 创建人 + + + + + 创建人名称 + + 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/518.cs b/FreeSql.Tests/FreeSql.Tests/Issues/518.cs new file mode 100644 index 00000000..a69536ae --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/Issues/518.cs @@ -0,0 +1,59 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Threading; +using Xunit; + +namespace FreeSql.Tests.Issues +{ + public class _518 + { + [Fact] + public void SelectTest() + { + IFreeSql free = g.sqlserver; + + //创建测试数据 + using (var db = free.CreateDbContext()) + { + db.Set().Remove(t => true); //清空旧数据 + db.SaveChanges(); + + //插入三条测试数据 + db.Add(new TestEntity518() { ID = "A", Name = "张三", Age = 18 }); + db.Add(new TestEntity518() { ID = "B", Name = "李四", Age = 19 }); + db.Add(new TestEntity518() { ID = "C", Name = "王五", Age = 20 }); + db.SaveChanges(); + } + + //开始测试 + using (var db = free.CreateDbContext()) + { + var entities = db.Set().Where(t => true).ToDictionary(t => t.ID); + + entities["A"].Age = 25; + db.Update(entities["A"]); + + entities["B"].Age = 26; + db.Update(entities["B"]); + + entities["C"].Age = 27; + //entities["C"].Name = "王五5"; //注释掉这一行就不会报错 + db.Update(entities["C"]); + + db.Add(new TestEntity518() { ID = "D", Name = "马六", Age = 30 }); + + db.SaveChanges(); + } + } + class TestEntity518 + { + public string ID { get; set; } + public string Name { get; set; } + public int Age { get; set; } + } + } +} diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/519.cs b/FreeSql.Tests/FreeSql.Tests/Issues/519.cs new file mode 100644 index 00000000..bcaf78ce --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/Issues/519.cs @@ -0,0 +1,72 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Threading; +using Xunit; + +namespace FreeSql.Tests.Issues +{ + public class _519 + { + [Fact] + public void SelectTest() + { + IFreeSql fsql = g.sqlserver; + + fsql.Delete().Where("1=1").ExecuteAffrows(); + fsql.Insert(new[] + { + new ST_Stock519 { StoreHouse = "001", Works = "101", MaterialCode = "201", BatchCode = "301", CreatedTime = DateTime.Now }, + new ST_Stock519 { StoreHouse = "002", Works = "102", MaterialCode = "202", BatchCode = "302", CreatedTime = DateTime.Now }, + new ST_Stock519 { StoreHouse = "003", Works = "103", MaterialCode = "203", BatchCode = "303", CreatedTime = DateTime.Now } + }).ExecuteAffrows(); + + var list = fsql.Select().ToList(); + var sql1 = fsql.Insert(list).NoneParameter().ToSql(); + var sql2 = fsql.Update().SetSource(list).NoneParameter().ToSql(); + var sql3 = fsql.InsertOrUpdate().SetSource(list).ToSql(); + } + class ST_Stock519 + { + /// + /// 库位 + /// + [Column(IsPrimary = true, DbType = "varchar(50)")] + public string StoreHouse { get; set; } = string.Empty; + + /// + /// 工厂 + /// + [Column(IsPrimary = true, DbType = "varchar(50)")] + public string Works { get; set; } = string.Empty; + /// + /// 物料号 + /// + [Column(IsPrimary = true, DbType = "varchar(50)")] + public string MaterialCode { get; set; } = string.Empty; + /// + /// 条码号 + /// + [Column(IsPrimary = true, DbType = "varchar(50)")] + public string BatchCode { get; set; } = string.Empty; + + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } + + /// + /// 创建人 + /// + public string CreatorID { get; set; } = string.Empty; + + /// + /// 创建人名称 + /// + public string CreatorName { get; set; } = string.Empty; + } + } +} diff --git a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs index ac621b0d..d2ed7a35 100644 --- a/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertOrUpdateProvider.cs @@ -166,7 +166,7 @@ namespace FreeSql.Internal.CommonProvider else { object val = col.GetDbValue(d); - sb.Append(_commonUtils.GetNoneParamaterSqlValue(dbParams, "cu", col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(dbParams, "cu", col, col.Attribute.MapType, val)); } if (didx == 0) sb.Append(" as ").Append(col.Attribute.Name); ++colidx2; diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index 3ede179a..cb14f9cb 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -571,7 +571,7 @@ namespace FreeSql.Internal.CommonProvider object val = col.GetDbValue(d); if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384 if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 40720ec1..5d579daf 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -427,7 +427,7 @@ namespace FreeSql.Internal.CommonProvider _set.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = "); if (_noneParameter) { - _set.Append(_commonUtils.GetNoneParamaterSqlValue(_params, "u", col.Attribute.MapType, val)); + _set.Append(_commonUtils.GetNoneParamaterSqlValue(_params, "u", col, col.Attribute.MapType, val)); } else { @@ -588,7 +588,7 @@ namespace FreeSql.Internal.CommonProvider var sb = new StringBuilder(); sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = "); - sb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, col.GetDbValue(_source.First())))); + sb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, col.GetDbValue(_source.First())))); return sb.ToString(); @@ -612,7 +612,7 @@ namespace FreeSql.Internal.CommonProvider ToSqlWhen(cwsb, _table.Primarys, d); cwsb.Append(" THEN "); var val = col.GetDbValue(d); - cwsb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val))); + cwsb.Append(thenValue(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val))); if (val == null || val == DBNull.Value) nulls++; } cwsb.Append(" END"); @@ -685,7 +685,7 @@ namespace FreeSql.Internal.CommonProvider { var val = col.GetDbValue(_source.First()); if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}"))); @@ -730,7 +730,7 @@ namespace FreeSql.Internal.CommonProvider cwsb.Append(" THEN "); var val = col.GetDbValue(d); if (_noneParameter) - cwsb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val)); + cwsb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val)); else { cwsb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}"))); diff --git a/FreeSql/Internal/CommonUtils.cs b/FreeSql/Internal/CommonUtils.cs index 0bcd1bbd..37963385 100644 --- a/FreeSql/Internal/CommonUtils.cs +++ b/FreeSql/Internal/CommonUtils.cs @@ -23,7 +23,7 @@ namespace FreeSql.Internal public abstract class CommonUtils { - public abstract string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value); + public abstract string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value); public abstract DbParameter AppendParamter(List _params, string parameterName, ColumnInfo col, Type type, object value); public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj); public abstract string FormatSql(string sql, params object[] args); @@ -267,7 +267,7 @@ namespace FreeSql.Internal var pk1 = primarys.FirstOrDefault(); if (primarys.Length == 1 && (type == pk1.CsType || type.IsNumberType() && pk1.CsType.IsNumberType())) { - return $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {this.FormatSql("{0}", Utils.GetDataReaderValue(pk1.Attribute.MapType, dywhere))}"; + return $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, dywhere))}"; } else if (primarys.Length > 0 && (type == table.Type || type.BaseType == table.Type)) { @@ -276,15 +276,15 @@ namespace FreeSql.Internal foreach (var pk in primarys) { if (pkidx > 0) sb.Append(" AND "); - sb.Append(aliasAndDot).Append(this.QuoteSqlName(pk.Attribute.Name)); - sb.Append(this.FormatSql(" = {0}", pk.GetDbValue(dywhere))); + sb.Append(aliasAndDot).Append(this.QuoteSqlName(pk.Attribute.Name)).Append(" = "); + sb.Append(GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pk.GetDbValue(dywhere))); ++pkidx; } return sb.ToString(); } else if (primarys.Length == 1 && type == typeof(string)) { - return $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {this.FormatSql("{0}", Utils.GetDataReaderValue(pk1.Attribute.MapType, dywhere))}"; + return $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, dywhere))}"; } else if (primarys.Length == 1 && dywhere is IEnumerable) { @@ -303,8 +303,8 @@ namespace FreeSql.Internal var itype = i.GetType(); isEntityType = (itype == table.Type || itype.BaseType == table.Type); } - if (isEntityType) sb.Append(this.FormatSql("{0}", primarys[0].GetDbValue(i))); - else sb.Append(this.FormatSql("{0}", Utils.GetDataReaderValue(pk1.Attribute.MapType, i))); + if (isEntityType) sb.Append(GetNoneParamaterSqlValue(null, null, primarys[0], primarys[0].Attribute.MapType, primarys[0].GetDbValue(i))); + else sb.Append(GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, i))); ++ieidx; } if (isAny == false) return ""; @@ -338,8 +338,8 @@ namespace FreeSql.Internal if (trycol == null) continue; if (psidx > 0) sb.Append(" AND "); - sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name)); - sb.Append(this.FormatSql(" = {0}", Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere, null)))); + sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name)).Append(" = "); + sb.Append(GetNoneParamaterSqlValue(null, null, trycol, trycol.Attribute.MapType, Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere, null)))); ++psidx; } if (psidx == 0) return ""; @@ -360,8 +360,8 @@ namespace FreeSql.Internal sbin.Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name)); var indt = its.Select(a => pk1.GetDbValue(a)).Where(a => a != null).ToArray(); if (indt.Any() == false) return null; - if (indt.Length == 1) sbin.Append(" = ").Append(this.FormatSql("{0}", indt.First())); - else sbin.Append(" IN (").Append(string.Join(",", indt.Select(a => this.FormatSql("{0}", a)))).Append(")"); + if (indt.Length == 1) sbin.Append(" = ").Append(GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, indt.First())); + else sbin.Append(" IN (").Append(string.Join(",", indt.Select(a => GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, a)))).Append(")"); return sbin.ToString(); } var dicpk = its.Length > 5 ? new Dictionary() : null; @@ -371,7 +371,7 @@ namespace FreeSql.Internal { var filter = ""; foreach (var pk in table.Primarys) - filter += $" AND {aliasAndDot}{this.QuoteSqlName(pk.Attribute.Name)} = {this.FormatSql("{0}", pk.GetDbValue(item))}"; + filter += $" AND {aliasAndDot}{this.QuoteSqlName(pk.Attribute.Name)} = {GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pk.GetDbValue(item))}"; if (string.IsNullOrEmpty(filter)) continue; if (sb != null) { diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 0d286190..0786b1ec 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -187,7 +187,7 @@ namespace FreeSql.Internal } try { - col.DbDefaultValue = common.GetNoneParamaterSqlValue(new List(), "init", colattr.MapType, defaultValue); + col.DbDefaultValue = common.GetNoneParamaterSqlValue(new List(), "init", col, colattr.MapType, defaultValue); } catch { diff --git a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs index c1e3047c..e0e0173c 100644 --- a/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs +++ b/Providers/FreeSql.Provider.Dameng/Curd/DamengInsert.cs @@ -69,7 +69,7 @@ namespace FreeSql.Dameng.Curd object val = col.GetDbValue(d); if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384 if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); diff --git a/Providers/FreeSql.Provider.Dameng/DamengUtils.cs b/Providers/FreeSql.Provider.Dameng/DamengUtils.cs index b9500106..d8faa6f5 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengUtils.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengUtils.cs @@ -93,7 +93,7 @@ namespace FreeSql.Dameng public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs b/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs index 98a9cb76..a20c5fbc 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdUtils.cs @@ -82,7 +82,7 @@ namespace FreeSql.Firebird public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESUtils.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESUtils.cs index 91bc9f92..f0667e70 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESUtils.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESUtils.cs @@ -124,7 +124,7 @@ namespace FreeSql.KingbaseES public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -146,7 +146,7 @@ namespace FreeSql.KingbaseES { var item = valueArr.GetValue(a); if (a > 0) sb.Append(","); - sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item)); + sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item)); } sb.Append("]"); var dbinfo = _orm.CodeFirst.GetDbInfo(type); diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessUtils.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessUtils.cs index ed8fc51b..9898dcac 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessUtils.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessUtils.cs @@ -82,7 +82,7 @@ namespace FreeSql.MsAccess public override string FieldAsAlias(string alias) => $" as {alias}"; public override string IIF(string test, string ifTrue, string ifElse) => $"iif({test}, {ifTrue}, {ifElse})"; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.MySql/MySqlUtils.cs b/Providers/FreeSql.Provider.MySql/MySqlUtils.cs index 5a4ced4d..6d2555bc 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlUtils.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlUtils.cs @@ -126,7 +126,7 @@ namespace FreeSql.MySql return columnName; } - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs b/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs index 221855b1..c8cdabb2 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/MySqlConnectorUtils.cs @@ -146,7 +146,7 @@ namespace FreeSql.MySql return columnName; } - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs index ee2ca1a0..ac099657 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/Curd/OdbcDamengInsert.cs @@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Dameng object val = col.GetDbValue(d); if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384 if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengUtils.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengUtils.cs index a9edc60d..edaa12e1 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengUtils.cs @@ -99,7 +99,7 @@ namespace FreeSql.Odbc.Dameng public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs index 64fd5d83..d24daf3b 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs @@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Default public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => Adapter.FieldSql(type, columnName); - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESUtils.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESUtils.cs index b1a3a680..6b661ab8 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESUtils.cs @@ -123,7 +123,7 @@ namespace FreeSql.Odbc.KingbaseES public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -145,7 +145,7 @@ namespace FreeSql.Odbc.KingbaseES { var item = valueArr.GetValue(a); if (a > 0) sb.Append(","); - sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item)); + sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item)); } sb.Append("]"); var dbinfo = _orm.CodeFirst.GetDbInfo(type); diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs index dc65db27..87a54520 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlUtils.cs @@ -93,7 +93,7 @@ namespace FreeSql.Odbc.MySql return columnName; } - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs index d2903b2d..f687a17d 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/Curd/OdbcOracleInsert.cs @@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Oracle object val = col.GetDbValue(d); if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384 if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleUtils.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleUtils.cs index 1279be50..9c4b68b0 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleUtils.cs @@ -99,7 +99,7 @@ namespace FreeSql.Odbc.Oracle public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLUtils.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLUtils.cs index c65c1788..68a21b0f 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLUtils.cs @@ -123,7 +123,7 @@ namespace FreeSql.Odbc.PostgreSQL public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -145,7 +145,7 @@ namespace FreeSql.Odbc.PostgreSQL { var item = valueArr.GetValue(a); if (a > 0) sb.Append(","); - sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item)); + sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item)); } sb.Append("]"); var dbinfo = _orm.CodeFirst.GetDbInfo(type); diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerUtils.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerUtils.cs index bb2fc858..666f01d0 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerUtils.cs @@ -1,4 +1,5 @@ using FreeSql.Internal; +using FreeSql.Internal.CommonProvider; using FreeSql.Internal.Model; using System; using System.Collections.Generic; @@ -86,7 +87,7 @@ namespace FreeSql.Odbc.SqlServer public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -96,7 +97,7 @@ namespace FreeSql.Odbc.SqlServer var ts = (TimeSpan)value; value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}"; } - return FormatSql("{0}", value, 1); + return string.Format(CultureInfo.InvariantCulture, "{0}", (_orm.Ado as AdoProvider).AddslashesProcessParam(value, type, col)); } } } diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs index e7f68355..ce124df9 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs @@ -78,7 +78,7 @@ namespace FreeSql.Oracle.Curd object val = col.GetDbValue(d); if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384 if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); @@ -143,7 +143,7 @@ namespace FreeSql.Oracle.Curd object val = col.GetDbValue(d); if (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384 if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val)); + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val)); else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); diff --git a/Providers/FreeSql.Provider.Oracle/OracleUtils.cs b/Providers/FreeSql.Provider.Oracle/OracleUtils.cs index 4538a0ff..9d66f317 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleUtils.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleUtils.cs @@ -98,7 +98,7 @@ namespace FreeSql.Oracle public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs index bf384eda..71c5f478 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLUtils.cs @@ -163,7 +163,7 @@ namespace FreeSql.PostgreSQL public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; static ConcurrentDictionary _dicIsAssignableFromPostgisGeometry = new ConcurrentDictionary(); - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -199,7 +199,7 @@ namespace FreeSql.PostgreSQL { var item = valueArr.GetValue(a); if (a > 0) sb.Append(","); - sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item)); + sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item)); } sb.Append("]"); var dbinfo = _orm.CodeFirst.GetDbInfo(type); diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongUtils.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongUtils.cs index b29ce343..a413ae16 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongUtils.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongUtils.cs @@ -137,7 +137,7 @@ namespace FreeSql.ShenTong public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -161,7 +161,7 @@ namespace FreeSql.ShenTong { var item = valueArr.GetValue(a); if (a > 0) sb.Append(","); - sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item)); + sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item)); } sb.Append("]"); var dbinfo = _orm.CodeFirst.GetDbInfo(type); diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs index 88a36219..9295faec 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerUtils.cs @@ -1,4 +1,5 @@ using FreeSql.Internal; +using FreeSql.Internal.CommonProvider; using FreeSql.Internal.Model; using System; using System.Collections.Generic; @@ -102,7 +103,7 @@ namespace FreeSql.SqlServer public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value); @@ -112,7 +113,7 @@ namespace FreeSql.SqlServer var ts = (TimeSpan)value; value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}"; } - return FormatSql("{0}", value, 1); + return string.Format(CultureInfo.InvariantCulture, "{0}", (_orm.Ado as AdoProvider).AddslashesProcessParam(value, type, col)); } } } diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs b/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs index 98ed34bd..ffdbb89c 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteUtils.cs @@ -98,7 +98,7 @@ namespace FreeSql.Sqlite public override string QuoteWriteParamter(Type type, string paramterName) => paramterName; public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName; - public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, Type type, object value) + public override string GetNoneParamaterSqlValue(List specialParams, string specialParamFlag, ColumnInfo col, Type type, object value) { if (value == null) return "NULL"; if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);