Update oracle parameter is key word

This commit is contained in:
sunkaixuan 2022-05-04 09:47:11 +08:00
parent 3594e31056
commit 53eaabdc08
2 changed files with 28 additions and 0 deletions

View File

@ -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", "张三");

View File

@ -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;