From e969a9d07897d8dd15361bf89ee40bf5f501643f Mon Sep 17 00:00:00 2001 From: Grzegorz Russek Date: Tue, 22 Oct 2024 14:50:22 +0200 Subject: [PATCH] Added SupportStoredProceduresResult, because not all databases support that. --- AmalgamationTool/DynamORM.Amalgamation.cs | 15 ++++++++++++--- DynamORM/DynamicDatabaseOptions.cs | 3 +++ DynamORM/DynamicProcedureInvoker.cs | 12 +++++++++--- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs index cb95713..7090941 100644 --- a/AmalgamationTool/DynamORM.Amalgamation.cs +++ b/AmalgamationTool/DynamORM.Amalgamation.cs @@ -3657,6 +3657,9 @@ namespace DynamORM /// Database support stored procedures (EXEC procedure ...). SupportStoredProcedures = 0x00000100, + /// Database support stored procedures results (Return value). + SupportStoredProceduresResult = 0x00000200, + /// Database support with no lock syntax. SupportNoLock = 0x00001000, @@ -5882,14 +5885,20 @@ namespace DynamORM else { var returnName = _db.GetParameterName("___result___"); - if (!retIsAdded) - cmd.AddParameter(returnName, ParameterDirection.ReturnValue, DbType.Int32, 4, 0, 0, DBNull.Value); + if ((_db.Options & DynamicDatabaseOptions.SupportStoredProceduresResult) == DynamicDatabaseOptions.SupportStoredProceduresResult) + { + if (!retIsAdded) + cmd.AddParameter(returnName, ParameterDirection.ReturnValue, DbType.Int32, 4, 0, 0, DBNull.Value); + } mainResult = cmd.ExecuteNonQuery(); IDbDataParameter returnParam = null; if (!retIsAdded) - returnParam = cmd.Parameters[returnName] as IDbDataParameter; + { + if ((_db.Options & DynamicDatabaseOptions.SupportStoredProceduresResult) == DynamicDatabaseOptions.SupportStoredProceduresResult) + returnParam = cmd.Parameters[returnName] as IDbDataParameter; + } else { foreach (var e in cmd.Parameters) diff --git a/DynamORM/DynamicDatabaseOptions.cs b/DynamORM/DynamicDatabaseOptions.cs index 3d4ba42..97de33d 100644 --- a/DynamORM/DynamicDatabaseOptions.cs +++ b/DynamORM/DynamicDatabaseOptions.cs @@ -59,6 +59,9 @@ namespace DynamORM /// Database support stored procedures (EXEC procedure ...). SupportStoredProcedures = 0x00000100, + /// Database support stored procedures results (Return value). + SupportStoredProceduresResult = 0x00000200, + /// Database support with no lock syntax. SupportNoLock = 0x00001000, diff --git a/DynamORM/DynamicProcedureInvoker.cs b/DynamORM/DynamicProcedureInvoker.cs index 352431a..699d6f7 100644 --- a/DynamORM/DynamicProcedureInvoker.cs +++ b/DynamORM/DynamicProcedureInvoker.cs @@ -380,14 +380,20 @@ namespace DynamORM else { var returnName = _db.GetParameterName("___result___"); - if (!retIsAdded) - cmd.AddParameter(returnName, ParameterDirection.ReturnValue, DbType.Int32, 4, 0, 0, DBNull.Value); + if ((_db.Options & DynamicDatabaseOptions.SupportStoredProceduresResult) == DynamicDatabaseOptions.SupportStoredProceduresResult) + { + if (!retIsAdded) + cmd.AddParameter(returnName, ParameterDirection.ReturnValue, DbType.Int32, 4, 0, 0, DBNull.Value); + } mainResult = cmd.ExecuteNonQuery(); IDbDataParameter returnParam = null; if (!retIsAdded) - returnParam = cmd.Parameters[returnName] as IDbDataParameter; + { + if ((_db.Options & DynamicDatabaseOptions.SupportStoredProceduresResult) == DynamicDatabaseOptions.SupportStoredProceduresResult) + returnParam = cmd.Parameters[returnName] as IDbDataParameter; + } else { foreach (var e in cmd.Parameters)