mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 增加 OracleUs7ascii 写入处理特性;
This commit is contained in:
		@@ -1,4 +1,5 @@
 | 
				
			|||||||
using FreeSql.Internal;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
 | 
					using FreeSql.Internal;
 | 
				
			||||||
using FreeSql.Internal.CommonProvider;
 | 
					using FreeSql.Internal.CommonProvider;
 | 
				
			||||||
using FreeSql.Internal.Model;
 | 
					using FreeSql.Internal.Model;
 | 
				
			||||||
using FreeSql.Internal.ObjectPool;
 | 
					using FreeSql.Internal.ObjectPool;
 | 
				
			||||||
@@ -6,6 +7,7 @@ using System;
 | 
				
			|||||||
using System.Collections;
 | 
					using System.Collections;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Reflection;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Oracle
 | 
					namespace FreeSql.Oracle
 | 
				
			||||||
@@ -50,7 +52,17 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
            else if (param is bool || param is bool?)
 | 
					            else if (param is bool || param is bool?)
 | 
				
			||||||
                return (bool)param ? 1 : 0;
 | 
					                return (bool)param ? 1 : 0;
 | 
				
			||||||
            else if (param is string)
 | 
					            else if (param is string)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					#if oledb
 | 
				
			||||||
 | 
					                if (mapColumn?.Table != null && mapColumn.Table.Properties.TryGetValue(mapColumn.CsName, out var prop))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    var us7attr = prop.GetCustomAttributes(typeof(OracleUS7AsciiAttribute), false)?.FirstOrDefault() as OracleUS7AsciiAttribute;
 | 
				
			||||||
 | 
					                    if (us7attr != null) return OracleUtils.StringToAscii(param as string, us7attr.Encoding);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''"), "'");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            else if (param is char)
 | 
					            else if (param is char)
 | 
				
			||||||
                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
					                return string.Concat("'", param.ToString().Replace("'", "''").Replace('\0', ' '), "'");
 | 
				
			||||||
            else if (param is Enum)
 | 
					            else if (param is Enum)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,15 @@
 | 
				
			|||||||
using FreeSql.Internal;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
 | 
					using FreeSql.Internal;
 | 
				
			||||||
using FreeSql.Internal.Model;
 | 
					using FreeSql.Internal.Model;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections;
 | 
					using System.Collections;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.OleDb;
 | 
					 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
 | 
					using System.Data.OleDb;
 | 
				
			||||||
using System.Globalization;
 | 
					using System.Globalization;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Reflection;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Oracle
 | 
					namespace FreeSql.Oracle
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -147,6 +151,12 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
            if (type == typeof(string))
 | 
					            if (type == typeof(string))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var valueString = value as string;
 | 
					                var valueString = value as string;
 | 
				
			||||||
 | 
					                if (col?.Table != null && col.Table.Properties.TryGetValue(col.CsName, out var prop))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    var us7attr = prop.GetCustomAttributes(typeof(OracleUS7AsciiAttribute), false)?.FirstOrDefault() as OracleUS7AsciiAttribute;
 | 
				
			||||||
 | 
					                    if (us7attr != null) return StringToAscii(valueString, us7attr.Encoding);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (valueString != null)
 | 
					                if (valueString != null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (valueString.Length < 4000) return string.Concat("'", valueString.Replace("'", "''"), "'");
 | 
					                    if (valueString.Length < 4000) return string.Concat("'", valueString.Replace("'", "''"), "'");
 | 
				
			||||||
@@ -166,5 +176,25 @@ namespace FreeSql.Oracle
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return FormatSql("{0}", value, 1);
 | 
					            return FormatSql("{0}", value, 1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static string StringToAscii(string value, string encoding) //US7ASCII
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (string.IsNullOrEmpty(value)) return "NULL";
 | 
				
			||||||
 | 
					            var bytes = Encoding.GetEncoding(encoding).GetBytes(value);
 | 
				
			||||||
 | 
					            var sb = new StringBuilder();
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                for (int i = 0; i < bytes.Length; i++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (i > 0) sb.Append("||");
 | 
				
			||||||
 | 
					                    sb.Append("chr(").Append(bytes[i].ToString()).Append(")");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            finally
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                sb.Clear();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace FreeSql.DataAnnotations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [AttributeUsage(AttributeTargets.Class)]
 | 
				
			||||||
 | 
					    public class OracleUS7AsciiAttribute : Attribute
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public OracleUS7AsciiAttribute() { }
 | 
				
			||||||
 | 
					        public OracleUS7AsciiAttribute(string encoding)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.Encoding = encoding;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 编码
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public string Encoding { get; set; } = "GB2312";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user