Skip to content

Commit a5a5b93

Browse files
committed
RefreshStoredProcedureParameters if database side change StoredProcedure interface (parameter declarations)
1 parent 4167c3f commit a5a5b93

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

.nuget/NuGet.exe

1 MB
Binary file not shown.

DataAccess/Cache/DerivedParametersCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static TimeSpan ExpireInterval
3131
static DerivedParametersCache()
3232
{
3333
_CacheRoot = new ConcurrentDictionary<string, StoredProcedureDictionary>(StringComparer.OrdinalIgnoreCase);
34-
ExpireInterval = TimeSpan.FromHours(1); // Default 1 hour
34+
ExpireInterval = TimeSpan.FromHours(2); // Defaults to 2 hour
3535
}
3636

3737
#region Private Basic Operations

DataAccess/DbAccess.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,32 +95,32 @@ private DbCommand CreateCommand(string commandText, int commandTimeout, CommandT
9595
private DbDataReader CreateReader(string commandText, int commandTimeout, CommandType commandType, Action<DbParameterBuilder> parametersBuilder, int resultSetCnt = 1)
9696
{
9797
int recordsAffected;
98-
return InternalExecute(commandText, commandTimeout, commandType, parametersBuilder, resultSetCnt, out recordsAffected);
98+
return ExecuteCommandInternal(commandText, commandTimeout, commandType, parametersBuilder, resultSetCnt, out recordsAffected);
9999
}
100100

101-
private DbDataReader InternalExecute(string commandText, int commandTimeout, CommandType commandType, Action<DbParameterBuilder> parametersBuilder, int resultSetCnt, out int recordsAffected)
101+
private DbDataReader ExecuteCommandInternal(string commandText, int commandTimeout, CommandType commandType, Action<DbParameterBuilder> parametersBuilder, int resultSetCnt, out int recordsAffected)
102102
{
103-
for (int retry = 2; ; retry--)
103+
for (int retry = 0; ; retry++)
104104
{
105105
try
106106
{
107107
DbCommand dbCmd = CreateCommand(commandText, commandTimeout, commandType, parametersBuilder);
108108

109-
if (resultSetCnt > 0)
109+
if (resultSetCnt < 0)
110110
{
111-
OnReaderExecuting(dbCmd, resultSetCnt);
112-
recordsAffected = -1;
113-
return dbCmd.ExecuteReader();
111+
recordsAffected = dbCmd.ExecuteNonQuery();
112+
return null;
114113
}
115114
else
116115
{
117-
recordsAffected = dbCmd.ExecuteNonQuery();
118-
return null;
116+
OnReaderExecuting(dbCmd, resultSetCnt);
117+
recordsAffected = -1;
118+
return dbCmd.ExecuteReader();
119119
}
120120
}
121121
catch (Exception e)
122122
{
123-
if (retry <= 0)
123+
if (retry > 0)
124124
throw;
125125

126126
switch (OnContextLost(e))
@@ -268,7 +268,7 @@ public int ExecuteNonQuery(string commandText, int commandTimeout, CommandType c
268268
{
269269
int recordsAffected;
270270

271-
InternalExecute(commandText, commandTimeout, commandType, parametersBuilder, 0, out recordsAffected);
271+
ExecuteCommandInternal(commandText, commandTimeout, commandType, parametersBuilder, -1, out recordsAffected);
272272

273273
return recordsAffected;
274274
}

DataAccess/Oracle/DbAccess.partial.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,7 @@ partial void OnOracleContextLost(Exception dbException, ref RetryAction retryAct
3535
retryAction = RetryAction.Reconnect;
3636
break;
3737
case 6550:
38-
if (e.Errors.Count == 1 && e.Message.Contains("PLS-00306: "))
39-
retryAction = RetryAction.RefreshParameters;
40-
else
41-
retryAction = RetryAction.None;
38+
retryAction = (e.Errors.Count == 1 && e.Message.Contains("PLS-00306: ")) ? RetryAction.RefreshParameters : RetryAction.None;
4239
break;
4340
// To add other cases
4441
default:

DataAccess/SqlServer/DbAccess.partial.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,22 @@ partial void OnSqlContextLost(Exception dbException, ref RetryAction retryAction
1717
if (e == null)
1818
retryAction = RetryAction.None;
1919
else
20-
switch (e.Number)
20+
switch (e.Number) // sys.messages
2121
{
2222
case 233:
2323
case -2:
24+
case 10054:
2425
retryAction = RetryAction.Reconnect;
2526
break;
26-
case 201:
27-
case 8144:
27+
case 201: // Procedure or function '%.*ls' expects parameter '%.*ls', which was not supplied.
28+
case 206: // Operand type clash: %ls is incompatible with %ls.
29+
case 257: // Implicit conversion from data type %ls to %ls is not allowed. Use the CONVERT function to run this query.
30+
case 8144: // Procedure or function %.*ls has too many arguments specified.
2831
retryAction = RetryAction.RefreshParameters;
2932
break;
3033
// To add other cases
31-
default: retryAction = RetryAction.None;
34+
default:
35+
retryAction = RetryAction.None;
3236
break;
3337
}
3438

0 commit comments

Comments
 (0)