From 1c25d6eef8b2b0870a5f122dfd976b49ffc1ea08 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Mon, 10 Mar 2025 16:13:42 +0800 Subject: [PATCH] Update HANA --- Src/Asp.NetCore2/HANATest/Program.cs | 47 +++++++++++++++---- .../HANA/HANAProvider.cs | 37 +++++++++++++++ .../HANA/SqlBuilder/HANABuilder.cs | 4 +- .../HANA/SqlBuilder/HANAExpressionContext.cs | 4 +- 4 files changed, 79 insertions(+), 13 deletions(-) diff --git a/Src/Asp.NetCore2/HANATest/Program.cs b/Src/Asp.NetCore2/HANATest/Program.cs index 909138cfe..58b9bbaa8 100644 --- a/Src/Asp.NetCore2/HANATest/Program.cs +++ b/Src/Asp.NetCore2/HANATest/Program.cs @@ -1,16 +1,45 @@  using SqlSugar; -var db = new SqlSugarClient(new ConnectionConfig() +namespace GbaseTest { - ConnectionString = "DRIVER={HANAQAS64};SERVERNODE=172.16.10.12:32015;UID=WLH_BPM_TASK;PWD=BPM4pass1;DATABASENAME=Q00", - DbType = DbType.HANA, - IsAutoCloseConnection = true, -}); + internal class Program + { + static void Main(string[] args) + { + //这行代码扔程序启动时 + InstanceFactory.CustomAssemblies = new System.Reflection.Assembly[] { + typeof(SqlSugar.HANAConnector.HANAProvider).Assembly }; -db.Open(); -db.Close(); + var db = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = "DRIVER={HANAQAS64};SERVERNODE=172.16.10.12:32015;UID=WLH_BPM_TASK;PWD=BPM4pass1;DATABASENAME=Q00", + DbType = DbType.HANA, + IsAutoCloseConnection = true, + }, db => + { -var dt = db.Ado.GetDataTable("SELECT 1 as id"); -Console.WriteLine("Hello, World!"); + db.Aop.OnLogExecuting = (x, y) => + { + Console.WriteLine(x); + }; + + }); + + + db.Open(); + db.Close(); + + var dt = db.Ado.GetDataTable("SELECT * from DF_MM_POINFO where id=:id ", new { id = 1 }); + + var list = db.Queryable().Where(IT => IT.ID > 0).ToList(); + + Console.WriteLine("Hello, World!"); + } + public class DF_MM_POINFO + { + public int ID { get; set; } + } + } +} diff --git a/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/HANAProvider.cs b/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/HANAProvider.cs index 199b44362..58fc6e123 100644 --- a/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/HANAProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/HANAProvider.cs @@ -60,6 +60,7 @@ namespace SqlSugar.HANAConnector } public override DbCommand GetCommand(string sql, SugarParameter[] parameters) { + sql = ReplaceKeyWordParameterName(sql, parameters); HanaCommand sqlCommand = new HanaCommand(sql, (HanaConnection)this.Connection); sqlCommand.CommandType = this.CommandType; sqlCommand.CommandTimeout = this.CommandTimeOut; @@ -139,6 +140,42 @@ namespace SqlSugar.HANAConnector return false; } + private static string[] KeyWord = new string[] { }; + private static string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters) + { + sql = ReplaceKeyWordWithAd(sql, parameters); + if (parameters.HasValue() && parameters.Count(it => it.ParameterName.ToLower().IsIn(KeyWord)) > 0) + { + int i = 0; + foreach (var Parameter in parameters.OrderByDescending(it => it.ParameterName.Length)) + { + if (Parameter.ParameterName != null && Parameter.ParameterName.ToLower().IsContainsIn(KeyWord)) + { + var newName = ":p" + i + 100; + sql =System.Text.RegularExpressions.Regex.Replace(sql, Parameter.ParameterName, newName, System.Text.RegularExpressions.RegexOptions.IgnoreCase); + Parameter.ParameterName = newName; + i++; + } + } + } + return sql; + } + private static string ReplaceKeyWordWithAd(string sql, SugarParameter[] parameters) + { + if (parameters != null && sql != null && sql.Contains("@")) + { + foreach (var item in parameters.OrderByDescending(it => it.ParameterName.Length)) + { + if (item.ParameterName.StartsWith("@")) + { + item.ParameterName = ":" + item.ParameterName.TrimStart('@'); + } + sql = System.Text.RegularExpressions.Regex.Replace(sql, "@" + item.ParameterName.TrimStart(':'), item.ParameterName, System.Text.RegularExpressions.RegexOptions.IgnoreCase); + } + } + + return sql; + } #region async public async Task CloseAsync() diff --git a/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANABuilder.cs b/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANABuilder.cs index fc719694e..8e1ec3aa2 100644 --- a/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANABuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANABuilder.cs @@ -6,8 +6,8 @@ namespace SqlSugar.HANAConnector { public class HANABuilder : SqlBuilderProvider { - public override string SqlTranslationLeft { get { return "`"; } } - public override string SqlTranslationRight { get { return "`"; } } + public override string SqlTranslationLeft { get { return "\""; } } + public override string SqlTranslationRight { get { return "\""; } } public override string SqlDateNow { get diff --git a/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANAExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANAExpressionContext.cs index de06ef0b6..76330bad7 100644 --- a/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANAExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.HanaConnector/SqlSugar.HanaConnector/HANA/SqlBuilder/HANAExpressionContext.cs @@ -12,8 +12,8 @@ namespace SqlSugar.HANAConnector { base.DbMehtods = new HANAMethod(); } - public override string SqlTranslationLeft { get { return "`"; } } - public override string SqlTranslationRight { get { return "`"; } } + public override string SqlTranslationLeft { get { return "\""; } } + public override string SqlTranslationRight { get { return "\""; } } } public class HANAMethod : DefaultDbMethod, IDbMethods {