From 70c1ee7eda41fc9c68f9119967f916fe17f6ecc6 Mon Sep 17 00:00:00 2001 From: Cesar Alvarez Date: Thu, 10 Jun 2021 10:26:30 -0500 Subject: [PATCH] Added a paraPrefix variable to properly handle Oracle dialect --- Dapper.SimpleCRUD/SimpleCRUD.cs | 31 ++++++++++++++++++---------- Dapper.SimpleCRUD/SimpleCRUDAsync.cs | 13 ++++++------ 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Dapper.SimpleCRUD/SimpleCRUD.cs b/Dapper.SimpleCRUD/SimpleCRUD.cs index 691075c..43ab182 100644 --- a/Dapper.SimpleCRUD/SimpleCRUD.cs +++ b/Dapper.SimpleCRUD/SimpleCRUD.cs @@ -25,6 +25,7 @@ static SimpleCRUD() private static string _encapsulation; private static string _getIdentitySql; private static string _getPagedListSql; + private static string _paramPrefix; private static readonly ConcurrentDictionary TableNames = new ConcurrentDictionary(); private static readonly ConcurrentDictionary ColumnNames = new ConcurrentDictionary(); @@ -36,7 +37,7 @@ static SimpleCRUD() private static IColumnNameResolver _columnNameResolver = new ColumnNameResolver(); /// - /// Append a Cached version of a strinbBuilderAction result based on a cacheKey + /// Append a Cached version of a stringBuilderAction result based on a cacheKey /// /// /// @@ -78,36 +79,42 @@ public static void SetDialect(Dialect dialect) _encapsulation = "\"{0}\""; _getIdentitySql = string.Format("SELECT LASTVAL() AS id"); _getPagedListSql = "Select {SelectColumns} from {TableName} {WhereClause} Order By {OrderBy} LIMIT {RowsPerPage} OFFSET (({PageNumber}-1) * {RowsPerPage})"; + _paramPrefix = "@"; break; case Dialect.SQLite: _dialect = Dialect.SQLite; _encapsulation = "\"{0}\""; _getIdentitySql = string.Format("SELECT LAST_INSERT_ROWID() AS id"); _getPagedListSql = "Select {SelectColumns} from {TableName} {WhereClause} Order By {OrderBy} LIMIT {RowsPerPage} OFFSET (({PageNumber}-1) * {RowsPerPage})"; + _paramPrefix = "@"; break; case Dialect.MySQL: _dialect = Dialect.MySQL; _encapsulation = "`{0}`"; _getIdentitySql = string.Format("SELECT LAST_INSERT_ID() AS id"); _getPagedListSql = "Select {SelectColumns} from {TableName} {WhereClause} Order By {OrderBy} LIMIT {Offset},{RowsPerPage}"; + _paramPrefix = "@"; break; case Dialect.Oracle: _dialect = Dialect.Oracle; _encapsulation = "\"{0}\""; _getIdentitySql = ""; _getPagedListSql = "SELECT * FROM (SELECT ROWNUM PagedNUMBER, u.* FROM(SELECT {SelectColumns} from {TableName} {WhereClause} Order By {OrderBy}) u) WHERE PagedNUMBER BETWEEN (({PageNumber}-1) * {RowsPerPage} + 1) AND ({PageNumber} * {RowsPerPage})"; + _paramPrefix = ":"; break; case Dialect.DB2: _dialect = Dialect.DB2; _encapsulation = "\"{0}\""; _getIdentitySql = string.Format("SELECT CAST(IDENTITY_VAL_LOCAL() AS DEC(31,0)) AS \"id\" FROM SYSIBM.SYSDUMMY1"); _getPagedListSql = "Select * from (Select {SelectColumns}, row_number() over(order by {OrderBy}) as PagedNumber from {TableName} {WhereClause} Order By {OrderBy}) as t where t.PagedNumber between (({PageNumber}-1) * {RowsPerPage} + 1) AND ({PageNumber} * {RowsPerPage})"; + _paramPrefix = "@"; break; default: _dialect = Dialect.SQLServer; _encapsulation = "[{0}]"; _getIdentitySql = string.Format("SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS [id]"); _getPagedListSql = "SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY {OrderBy}) AS PagedNumber, {SelectColumns} FROM {TableName} {WhereClause}) AS u WHERE PagedNumber BETWEEN (({PageNumber}-1) * {RowsPerPage} + 1) AND ({PageNumber} * {RowsPerPage})"; + _paramPrefix = "@"; break; } } @@ -163,16 +170,16 @@ public static T Get(this IDbConnection connection, object id, IDbTransaction { if (i > 0) sb.Append(" and "); - sb.AppendFormat("{0} = @{1}", GetColumnName(idProps[i]), idProps[i].Name); + sb.AppendFormat("{0} = {2}{1}", GetColumnName(idProps[i]), idProps[i].Name, _paramPrefix); } var dynParms = new DynamicParameters(); if (idProps.Count == 1) - dynParms.Add("@" + idProps.First().Name, id); + dynParms.Add(_paramPrefix + idProps.First().Name, id); else { foreach (var prop in idProps) - dynParms.Add("@" + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); + dynParms.Add(_paramPrefix + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); } if (Debugger.IsAttached) @@ -539,16 +546,16 @@ public static int Delete(this IDbConnection connection, object id, IDbTransac { if (i > 0) sb.Append(" and "); - sb.AppendFormat("{0} = @{1}", GetColumnName(idProps[i]), idProps[i].Name); + sb.AppendFormat("{0} = {2}{1}", GetColumnName(idProps[i]), idProps[i].Name, _paramPrefix); } var dynParms = new DynamicParameters(); if (idProps.Count == 1) - dynParms.Add("@" + idProps.First().Name, id); + dynParms.Add(_paramPrefix + idProps.First().Name, id); else { foreach (var prop in idProps) - dynParms.Add("@" + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); + dynParms.Add(_paramPrefix + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); } if (Debugger.IsAttached) @@ -707,7 +714,7 @@ private static void BuildUpdateSet(T entityToUpdate, StringBuilder masterSb) { var property = nonIdProps[i]; - sb.AppendFormat("{0} = @{1}", GetColumnName(property), property.Name); + sb.AppendFormat("{0} = {2}{1}", GetColumnName(property), property.Name, _paramPrefix); if (i < nonIdProps.Length - 1) sb.AppendFormat(", "); } @@ -763,9 +770,10 @@ private static void BuildWhere(StringBuilder sb, IEnumerable(StringBuilder masterSb) if (property.Name.Equals("Id", StringComparison.OrdinalIgnoreCase) && property.GetCustomAttributes(true).All(attr => attr.GetType().Name != typeof(RequiredAttribute).Name) && property.PropertyType != typeof(Guid)) continue; - sb.AppendFormat("@{0}", property.Name); + sb.AppendFormat("{1}{0}", property.Name, _paramPrefix); if (i < props.Count() - 1) sb.Append(", "); } @@ -1267,3 +1275,4 @@ public static string CacheKey(this IEnumerable props) return string.Join(",",props.Select(p=> p.DeclaringType.FullName + "." + p.Name).ToArray()); } } + diff --git a/Dapper.SimpleCRUD/SimpleCRUDAsync.cs b/Dapper.SimpleCRUD/SimpleCRUDAsync.cs index ff70770..b7b9667 100644 --- a/Dapper.SimpleCRUD/SimpleCRUDAsync.cs +++ b/Dapper.SimpleCRUD/SimpleCRUDAsync.cs @@ -46,16 +46,16 @@ public static async Task GetAsync(this IDbConnection connection, object id { if (i > 0) sb.Append(" and "); - sb.AppendFormat("{0} = @{1}", GetColumnName(idProps[i]), idProps[i].Name); + sb.AppendFormat("{0} = {2}{1}", GetColumnName(idProps[i]), idProps[i].Name, _paramPrefix); } var dynParms = new DynamicParameters(); if (idProps.Count == 1) - dynParms.Add("@" + idProps.First().Name, id); + dynParms.Add(_paramPrefix + idProps.First().Name, id); else { foreach (var prop in idProps) - dynParms.Add("@" + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); + dynParms.Add(_paramPrefix + prop.Name, id.GetType().GetProperty(prop.Name).GetValue(id, null)); } if (Debugger.IsAttached) @@ -413,16 +413,16 @@ public static Task DeleteAsync(this IDbConnection connection, object id, { if (i > 0) sb.Append(" and "); - sb.AppendFormat("{0} = @{1}", GetColumnName(idProps[i]), idProps[i].Name); + sb.AppendFormat("{0} = {2}{1}", GetColumnName(idProps[i]), idProps[i].Name, _paramPrefix); } var dynParms = new DynamicParameters(); if (idProps.Count == 1) - dynParms.Add("@" + idProps.First().Name, id); + dynParms.Add(_paramPrefix + idProps.First().Name, id); else { foreach (var prop in idProps) - dynParms.Add("@" + prop.Name, prop.GetValue(id)); + dynParms.Add(_paramPrefix + prop.Name, prop.GetValue(id)); } if (Debugger.IsAttached) @@ -567,4 +567,3 @@ public static Task RecordCountAsync(this IDbConnection connection, objec } } } -