diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index d844a202..a644f48f 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -4,6 +4,7 @@ using FreeSql.Extensions; using FreeSql.Internal; using FreeSql.Internal.CommonProvider; using FreeSql.Internal.Model; +using FreeSql.Odbc.Default; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; @@ -381,8 +382,39 @@ namespace base_entity } public enum JoinTest01Enum { f1, f2, f3 } + public class AccessOdbcAdapter : OdbcAdapter + { + public override string UnicodeStringRawSql(object value, ColumnInfo mapColumn) => value == null ? "NULL" : string.Concat("'", value.ToString().Replace("'", "''"), "'"); + } + private static IFreeSql CreateInstance(string connectString, DataType type) + { + IFreeSql client = new FreeSqlBuilder() + .UseConnectionString(type, connectString) + .Build(); + if (DataType.Odbc.Equals(type)) + { + client.SetOdbcAdapter(new AccessOdbcAdapter()); + } + return client; + } + static void Main(string[] args) { + using (IFreeSql client = CreateInstance(@"Driver={Microsoft Access Driver (*.mdb)};DBQ=d:/accdb/2007.accdb", DataType.Odbc)) + { + Dictionary data = new Dictionary(); + data.Add("ExpNo", "RSP0950008"); + data.Add("SPoint", "RSP0950004"); + data.Add("EPoint", "RSP095000440"); + data.Add("PType", "RS"); + data.Add("GType", "窨井轮廓线"); + data.Add("LineStyle", 2); + data.Add("Memo", null); + data.Add("ClassID", null); + var kdkdksqlxx = client.InsertDict(data).AsTable("FZLINE").ToSql(); + } + + BaseModel.fsql = 1; BaseModel.fsql = 2; Console.WriteLine(BaseModel.fsql); diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs index d2104316..328bfe2a 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcUtils.cs @@ -37,7 +37,8 @@ namespace FreeSql.Odbc.Default return ret; }); - public override string FormatSql(string sql, params object[] args) => sql?.FormatOdbc(args); + static FreeSql.Odbc.Default.OdbcAdo _customAdo = new FreeSql.Odbc.Default.OdbcAdo(); + public override string FormatSql(string sql, params object[] args) => (_orm?.Ado as OdbcAdo)?.Addslashes(sql, args) ?? _customAdo.Addslashes(sql, args); public override string QuoteSqlName(params string[] name) { if (name.Length == 1) diff --git a/Providers/FreeSql.Provider.Odbc/FreeSqlOdbcGlobalExtensions.cs b/Providers/FreeSql.Provider.Odbc/FreeSqlOdbcGlobalExtensions.cs index 3f91fbbc..8459646c 100644 --- a/Providers/FreeSql.Provider.Odbc/FreeSqlOdbcGlobalExtensions.cs +++ b/Providers/FreeSql.Provider.Odbc/FreeSqlOdbcGlobalExtensions.cs @@ -37,15 +37,6 @@ internal static string FormatOdbcPostgreSQL(this string that, params object[] args) => _odbcPostgreSQLAdo.Addslashes(that, args); static FreeSql.Odbc.PostgreSQL.OdbcPostgreSQLAdo _odbcPostgreSQLAdo = new FreeSql.Odbc.PostgreSQL.OdbcPostgreSQLAdo(); - /// - /// 特殊处理类似 string.Format 的使用方法,防止注入,以及 IS NULL 转换 - /// - /// - /// - /// - internal static string FormatOdbc(this string that, params object[] args) => _odbcAdo.Addslashes(that, args); - static FreeSql.Odbc.Default.OdbcAdo _odbcAdo = new FreeSql.Odbc.Default.OdbcAdo(); - /// /// 特殊处理类似 string.Format 的使用方法,防止注入,以及 IS NULL 转换 ///