mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +08:00 
			
		
		
		
	- 优化 varchar/nvarchar 的 NoneParameter 处理;#519
This commit is contained in:
		@@ -104,6 +104,41 @@
 | 
				
			|||||||
            班期信息
 | 
					            班期信息
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.StoreHouse">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            库位
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.Works">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            工厂
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.MaterialCode">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            物料号
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.BatchCode">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            条码号
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.CreatedTime">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建时间
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.CreatorID">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建人
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Tests.Issues._519.ST_Stock519.CreatorName">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            创建人名称
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.Tests.MySql.MySqlCodeFirstTest.Tb_alltype.Save">
 | 
					        <member name="M:FreeSql.Tests.MySql.MySqlCodeFirstTest.Tb_alltype.Save">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
 | 
					            保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										59
									
								
								FreeSql.Tests/FreeSql.Tests/Issues/518.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								FreeSql.Tests/FreeSql.Tests/Issues/518.cs
									
									
									
									
									
										Normal file
									
								
							@@ -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<TestEntity518>().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<TestEntity518>().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; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										72
									
								
								FreeSql.Tests/FreeSql.Tests/Issues/519.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								FreeSql.Tests/FreeSql.Tests/Issues/519.cs
									
									
									
									
									
										Normal file
									
								
							@@ -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<ST_Stock519>().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<ST_Stock519>().ToList();
 | 
				
			||||||
 | 
					            var sql1 = fsql.Insert(list).NoneParameter().ToSql();
 | 
				
			||||||
 | 
					            var sql2 = fsql.Update<ST_Stock519>().SetSource(list).NoneParameter().ToSql();
 | 
				
			||||||
 | 
					            var sql3 = fsql.InsertOrUpdate<ST_Stock519>().SetSource(list).ToSql();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        class ST_Stock519
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 库位
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            [Column(IsPrimary = true, DbType = "varchar(50)")]
 | 
				
			||||||
 | 
					            public string StoreHouse { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 工厂
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            [Column(IsPrimary = true, DbType = "varchar(50)")]
 | 
				
			||||||
 | 
					            public string Works { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 物料号
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            [Column(IsPrimary = true, DbType = "varchar(50)")]
 | 
				
			||||||
 | 
					            public string MaterialCode { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 条码号
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            [Column(IsPrimary = true, DbType = "varchar(50)")]
 | 
				
			||||||
 | 
					            public string BatchCode { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 创建时间
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            public DateTime? CreatedTime { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 创建人
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            public string CreatorID { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 创建人名称
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            public string CreatorName { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -166,7 +166,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                    else
 | 
					                    else
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        object val = col.GetDbValue(d);
 | 
					                        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);
 | 
					                    if (didx == 0) sb.Append(" as ").Append(col.Attribute.Name);
 | 
				
			||||||
                    ++colidx2;
 | 
					                    ++colidx2;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -571,7 +571,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                        object val = col.GetDbValue(d);
 | 
					                        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 (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
 | 
				
			||||||
                        if (_noneParameter)
 | 
					                        if (_noneParameter)
 | 
				
			||||||
                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
 | 
					                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val));
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
					                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -427,7 +427,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            _set.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
 | 
					            _set.Append(", ").Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
 | 
				
			||||||
            if (_noneParameter)
 | 
					            if (_noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                _set.Append(_commonUtils.GetNoneParamaterSqlValue(_params, "u", col.Attribute.MapType, val));
 | 
					                _set.Append(_commonUtils.GetNoneParamaterSqlValue(_params, "u", col, col.Attribute.MapType, val));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -588,7 +588,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                var sb = new StringBuilder();
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
 | 
					                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();
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -612,7 +612,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                    ToSqlWhen(cwsb, _table.Primarys, d);
 | 
					                    ToSqlWhen(cwsb, _table.Primarys, d);
 | 
				
			||||||
                    cwsb.Append(" THEN ");
 | 
					                    cwsb.Append(" THEN ");
 | 
				
			||||||
                    var val = col.GetDbValue(d);
 | 
					                    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++;
 | 
					                    if (val == null || val == DBNull.Value) nulls++;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                cwsb.Append(" END");
 | 
					                cwsb.Append(" END");
 | 
				
			||||||
@@ -685,7 +685,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            var val = col.GetDbValue(_source.First());
 | 
					                            var val = col.GetDbValue(_source.First());
 | 
				
			||||||
                            if (_noneParameter)
 | 
					                            if (_noneParameter)
 | 
				
			||||||
                                sb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val));
 | 
					                                sb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val));
 | 
				
			||||||
                            else
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
 | 
					                                sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
 | 
				
			||||||
@@ -730,7 +730,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                                cwsb.Append(" THEN ");
 | 
					                                cwsb.Append(" THEN ");
 | 
				
			||||||
                                var val = col.GetDbValue(d);
 | 
					                                var val = col.GetDbValue(d);
 | 
				
			||||||
                                if (_noneParameter)
 | 
					                                if (_noneParameter)
 | 
				
			||||||
                                    cwsb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col.Attribute.MapType, val));
 | 
					                                    cwsb.Append(_commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val));
 | 
				
			||||||
                                else
 | 
					                                else
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
                                    cwsb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
 | 
					                                    cwsb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"p_{_paramsSource.Count}")));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
    public abstract class CommonUtils
 | 
					    public abstract class CommonUtils
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public abstract string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value);
 | 
					        public abstract string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value);
 | 
				
			||||||
        public abstract DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value);
 | 
					        public abstract DbParameter AppendParamter(List<DbParameter> _params, string parameterName, ColumnInfo col, Type type, object value);
 | 
				
			||||||
        public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj);
 | 
					        public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj);
 | 
				
			||||||
        public abstract string FormatSql(string sql, params object[] args);
 | 
					        public abstract string FormatSql(string sql, params object[] args);
 | 
				
			||||||
@@ -267,7 +267,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            var pk1 = primarys.FirstOrDefault();
 | 
					            var pk1 = primarys.FirstOrDefault();
 | 
				
			||||||
            if (primarys.Length == 1 && (type == pk1.CsType || type.IsNumberType() && pk1.CsType.IsNumberType()))
 | 
					            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))
 | 
					            else if (primarys.Length > 0 && (type == table.Type || type.BaseType == table.Type))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -276,15 +276,15 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                foreach (var pk in primarys)
 | 
					                foreach (var pk in primarys)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (pkidx > 0) sb.Append(" AND ");
 | 
					                    if (pkidx > 0) sb.Append(" AND ");
 | 
				
			||||||
                    sb.Append(aliasAndDot).Append(this.QuoteSqlName(pk.Attribute.Name));
 | 
					                    sb.Append(aliasAndDot).Append(this.QuoteSqlName(pk.Attribute.Name)).Append(" = ");
 | 
				
			||||||
                    sb.Append(this.FormatSql(" = {0}", pk.GetDbValue(dywhere)));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pk.GetDbValue(dywhere)));
 | 
				
			||||||
                    ++pkidx;
 | 
					                    ++pkidx;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                return sb.ToString();
 | 
					                return sb.ToString();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if (primarys.Length == 1 && type == typeof(string))
 | 
					            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)
 | 
					            else if (primarys.Length == 1 && dywhere is IEnumerable)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -303,8 +303,8 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                        var itype = i.GetType();
 | 
					                        var itype = i.GetType();
 | 
				
			||||||
                        isEntityType = (itype == table.Type || itype.BaseType == table.Type);
 | 
					                        isEntityType = (itype == table.Type || itype.BaseType == table.Type);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (isEntityType) sb.Append(this.FormatSql("{0}", primarys[0].GetDbValue(i)));
 | 
					                    if (isEntityType) sb.Append(GetNoneParamaterSqlValue(null, null, primarys[0], primarys[0].Attribute.MapType, primarys[0].GetDbValue(i)));
 | 
				
			||||||
                    else sb.Append(this.FormatSql("{0}", Utils.GetDataReaderValue(pk1.Attribute.MapType, i)));
 | 
					                    else sb.Append(GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, i)));
 | 
				
			||||||
                    ++ieidx;
 | 
					                    ++ieidx;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (isAny == false) return "";
 | 
					                if (isAny == false) return "";
 | 
				
			||||||
@@ -338,8 +338,8 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    if (trycol == null) continue;
 | 
					                    if (trycol == null) continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (psidx > 0) sb.Append(" AND ");
 | 
					                    if (psidx > 0) sb.Append(" AND ");
 | 
				
			||||||
                    sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name));
 | 
					                    sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name)).Append(" = ");
 | 
				
			||||||
                    sb.Append(this.FormatSql(" = {0}", Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere, null))));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(null, null, trycol, trycol.Attribute.MapType, Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere, null))));
 | 
				
			||||||
                    ++psidx;
 | 
					                    ++psidx;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (psidx == 0) return "";
 | 
					                if (psidx == 0) return "";
 | 
				
			||||||
@@ -360,8 +360,8 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                sbin.Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name));
 | 
					                sbin.Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name));
 | 
				
			||||||
                var indt = its.Select(a => pk1.GetDbValue(a)).Where(a => a != null).ToArray();
 | 
					                var indt = its.Select(a => pk1.GetDbValue(a)).Where(a => a != null).ToArray();
 | 
				
			||||||
                if (indt.Any() == false) return null;
 | 
					                if (indt.Any() == false) return null;
 | 
				
			||||||
                if (indt.Length == 1) sbin.Append(" = ").Append(this.FormatSql("{0}", indt.First()));
 | 
					                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 => this.FormatSql("{0}", a)))).Append(")");
 | 
					                else sbin.Append(" IN (").Append(string.Join(",", indt.Select(a => GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, a)))).Append(")");
 | 
				
			||||||
                return sbin.ToString();
 | 
					                return sbin.ToString();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            var dicpk = its.Length > 5 ? new Dictionary<string, bool>() : null;
 | 
					            var dicpk = its.Length > 5 ? new Dictionary<string, bool>() : null;
 | 
				
			||||||
@@ -371,7 +371,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                var filter = "";
 | 
					                var filter = "";
 | 
				
			||||||
                foreach (var pk in table.Primarys)
 | 
					                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 (string.IsNullOrEmpty(filter)) continue;
 | 
				
			||||||
                if (sb != null)
 | 
					                if (sb != null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -187,7 +187,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    col.DbDefaultValue = common.GetNoneParamaterSqlValue(new List<DbParameter>(), "init", colattr.MapType, defaultValue);
 | 
					                    col.DbDefaultValue = common.GetNoneParamaterSqlValue(new List<DbParameter>(), "init", col, colattr.MapType, defaultValue);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                catch
 | 
					                catch
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ namespace FreeSql.Dameng.Curd
 | 
				
			|||||||
                        object val = col.GetDbValue(d);
 | 
					                        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 (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
 | 
				
			||||||
                        if (_noneParameter)
 | 
					                        if (_noneParameter)
 | 
				
			||||||
                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
 | 
					                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val));
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
					                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,7 +93,7 @@ namespace FreeSql.Dameng
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ namespace FreeSql.Firebird
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -124,7 +124,7 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -146,7 +146,7 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    var item = valueArr.GetValue(a);
 | 
					                    var item = valueArr.GetValue(a);
 | 
				
			||||||
                    if (a > 0) sb.Append(",");
 | 
					                    if (a > 0) sb.Append(",");
 | 
				
			||||||
                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                sb.Append("]");
 | 
					                sb.Append("]");
 | 
				
			||||||
                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
					                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ namespace FreeSql.MsAccess
 | 
				
			|||||||
        public override string FieldAsAlias(string alias) => $" as {alias}";
 | 
					        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 IIF(string test, string ifTrue, string ifElse) => $"iif({test}, {ifTrue}, {ifElse})";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -126,7 +126,7 @@ namespace FreeSql.MySql
 | 
				
			|||||||
            return columnName;
 | 
					            return columnName;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,7 +146,7 @@ namespace FreeSql.MySql
 | 
				
			|||||||
            return columnName;
 | 
					            return columnName;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
                        object val = col.GetDbValue(d);
 | 
					                        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 (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
 | 
				
			||||||
                        if (_noneParameter)
 | 
					                        if (_noneParameter)
 | 
				
			||||||
                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
 | 
					                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val));
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
					                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,7 +99,7 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Default
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        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 QuoteReadColumn(Type type, Type mapType, string columnName) => Adapter.FieldSql(type, columnName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,7 +123,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -145,7 +145,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    var item = valueArr.GetValue(a);
 | 
					                    var item = valueArr.GetValue(a);
 | 
				
			||||||
                    if (a > 0) sb.Append(",");
 | 
					                    if (a > 0) sb.Append(",");
 | 
				
			||||||
                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                sb.Append("]");
 | 
					                sb.Append("]");
 | 
				
			||||||
                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
					                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,7 +93,7 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
            return columnName;
 | 
					            return columnName;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
                        object val = col.GetDbValue(d);
 | 
					                        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 (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
 | 
				
			||||||
                        if (_noneParameter)
 | 
					                        if (_noneParameter)
 | 
				
			||||||
                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
 | 
					                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val));
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
					                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,7 +99,7 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,7 +123,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -145,7 +145,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    var item = valueArr.GetValue(a);
 | 
					                    var item = valueArr.GetValue(a);
 | 
				
			||||||
                    if (a > 0) sb.Append(",");
 | 
					                    if (a > 0) sb.Append(",");
 | 
				
			||||||
                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                sb.Append("]");
 | 
					                sb.Append("]");
 | 
				
			||||||
                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
					                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
using FreeSql.Internal;
 | 
					using FreeSql.Internal;
 | 
				
			||||||
 | 
					using FreeSql.Internal.CommonProvider;
 | 
				
			||||||
using FreeSql.Internal.Model;
 | 
					using FreeSql.Internal.Model;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@@ -86,7 +87,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -96,7 +97,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
                var ts = (TimeSpan)value;
 | 
					                var ts = (TimeSpan)value;
 | 
				
			||||||
                value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
 | 
					                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));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,7 +78,7 @@ namespace FreeSql.Oracle.Curd
 | 
				
			|||||||
                        object val = col.GetDbValue(d);
 | 
					                        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 (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
 | 
				
			||||||
                        if (_noneParameter)
 | 
					                        if (_noneParameter)
 | 
				
			||||||
                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
 | 
					                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val));
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
					                            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);
 | 
					                        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 (val == null && col.Attribute.IsNullable == false) val = col.CsType == typeof(string) ? "" : Utils.GetDataReaderValue(col.CsType.NullableTypeOrThis(), null);//#384
 | 
				
			||||||
                        if (_noneParameter)
 | 
					                        if (_noneParameter)
 | 
				
			||||||
                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col.Attribute.MapType, val));
 | 
					                            sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, _noneParameterFlag, col, col.Attribute.MapType, val));
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
					                            sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,7 +98,7 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -163,7 +163,7 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        static ConcurrentDictionary<Type, bool> _dicIsAssignableFromPostgisGeometry = new ConcurrentDictionary<Type, bool>();
 | 
					        static ConcurrentDictionary<Type, bool> _dicIsAssignableFromPostgisGeometry = new ConcurrentDictionary<Type, bool>();
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -199,7 +199,7 @@ namespace FreeSql.PostgreSQL
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    var item = valueArr.GetValue(a);
 | 
					                    var item = valueArr.GetValue(a);
 | 
				
			||||||
                    if (a > 0) sb.Append(",");
 | 
					                    if (a > 0) sb.Append(",");
 | 
				
			||||||
                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                sb.Append("]");
 | 
					                sb.Append("]");
 | 
				
			||||||
                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
					                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,7 +137,7 @@ namespace FreeSql.ShenTong
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -161,7 +161,7 @@ namespace FreeSql.ShenTong
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    var item = valueArr.GetValue(a);
 | 
					                    var item = valueArr.GetValue(a);
 | 
				
			||||||
                    if (a > 0) sb.Append(",");
 | 
					                    if (a > 0) sb.Append(",");
 | 
				
			||||||
                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, eleType, item));
 | 
					                    sb.Append(GetNoneParamaterSqlValue(specialParams, specialParamFlag, col, eleType, item));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                sb.Append("]");
 | 
					                sb.Append("]");
 | 
				
			||||||
                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
					                var dbinfo = _orm.CodeFirst.GetDbInfo(type);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
using FreeSql.Internal;
 | 
					using FreeSql.Internal;
 | 
				
			||||||
 | 
					using FreeSql.Internal.CommonProvider;
 | 
				
			||||||
using FreeSql.Internal.Model;
 | 
					using FreeSql.Internal.Model;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
@@ -102,7 +103,7 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
@@ -112,7 +113,7 @@ namespace FreeSql.SqlServer
 | 
				
			|||||||
                var ts = (TimeSpan)value;
 | 
					                var ts = (TimeSpan)value;
 | 
				
			||||||
                value = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}.{ts.Milliseconds}";
 | 
					                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));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,7 +98,7 @@ namespace FreeSql.Sqlite
 | 
				
			|||||||
        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
					        public override string QuoteWriteParamter(Type type, string paramterName) => paramterName;
 | 
				
			||||||
        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
					        public override string QuoteReadColumn(Type type, Type mapType, string columnName) => columnName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, Type type, object value)
 | 
					        public override string GetNoneParamaterSqlValue(List<DbParameter> specialParams, string specialParamFlag, ColumnInfo col, Type type, object value)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (value == null) return "NULL";
 | 
					            if (value == null) return "NULL";
 | 
				
			||||||
            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
					            if (type.IsNumberType()) return string.Format(CultureInfo.InvariantCulture, "{0}", value);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user