mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 OracleUs7ascii 写入处理特性;
This commit is contained in:
parent
934be9cd9f
commit
8263c86a20
@ -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";
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user