diff --git a/Src/Asp.Net/OracleTest/Demo/Demo7_Ado.cs b/Src/Asp.Net/OracleTest/Demo/Demo7_Ado.cs index 8d7b1f4bc..f9a074f2c 100644 --- a/Src/Asp.Net/OracleTest/Demo/Demo7_Ado.cs +++ b/Src/Asp.Net/OracleTest/Demo/Demo7_Ado.cs @@ -38,6 +38,7 @@ namespace OrmTest //sql var dt2 = db.Ado.GetDataTable("select * from \"ORDER\" where @id>0 or name=@name", new { id = 1, name = "2" }); + var int1=db.Ado.GetInt("select @key as id from dual ", new { key = 1 }); //Stored Procedure //var dt3 = db.Ado.UseStoredProcedure().GetDataTable("sp_school", new { name = "张三", age = 0 }); //var nameP = new SugarParameter("@name", "张三"); diff --git a/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs b/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs index 759266852..ec7df9f0d 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Oracle/OracleProvider.cs @@ -87,6 +87,7 @@ namespace SqlSugar } public override DbCommand GetCommand(string sql, SugarParameter[] parameters) { + sql = ReplaceKeyWordParameterName(sql, parameters); OracleCommand sqlCommand = new OracleCommand(sql, (OracleConnection)this.Connection); sqlCommand.BindByName = true; sqlCommand.CommandType = this.CommandType; @@ -104,6 +105,32 @@ namespace SqlSugar CheckConnection(); return sqlCommand; } + + private static string ReplaceKeyWordParameterName(string sql, SugarParameter[] parameters) + { + if (parameters.HasValue()) + { + foreach (var Parameter in parameters) + { + if (Parameter.ParameterName!=null&&Parameter.ParameterName.ToLower().IsIn("@user", "@level", "@key", ":user", ":level", ":key")) + { + if (parameters.Count(it => it.ParameterName.StartsWith(Parameter.ParameterName)) == 1) + { + var newName = Parameter.ParameterName + "_01"; + sql = sql.Replace(Parameter.ParameterName, newName); + Parameter.ParameterName = newName; + } + else + { + Check.ExceptionEasy($" {Parameter.ParameterName} is key word", $"{Parameter.ParameterName}Êǹؼü´Ê"); + } + } + } + } + + return sql; + } + public override void SetCommandToAdapter(IDataAdapter dataAdapter, DbCommand command) { ((OracleDataAdapter)dataAdapter).SelectCommand = (OracleCommand)command;