Added MySql ErrorCode to MySqlCommandException. Cleaned up code. Bumped version to 1.0.9
This commit is contained in:
parent
621d9c74fb
commit
7595acb740
@ -17,6 +17,11 @@ namespace MontoyaTech.MySqlPlus
|
||||
/// </summary>
|
||||
public MySqlCommand Command = null;
|
||||
|
||||
/// <summary>
|
||||
/// The MySqlErrorCode if any for this exception. -1 means no code.
|
||||
/// </summary>
|
||||
public int ErrorCode = -1;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new MySqlCommandException with a command.
|
||||
/// </summary>
|
||||
@ -35,5 +40,18 @@ namespace MontoyaTech.MySqlPlus
|
||||
{
|
||||
this.Command = command;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new MySqlCommandException with a command and inner exception if any.
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
/// <param name="errorCode"></param>
|
||||
/// <param name="inner"></param>
|
||||
public MySqlCommandException(MySqlCommand command, int errorCode, Exception inner) : base($"Failed to execute MySqlCommand. ErrorCode: {errorCode} Query: {command.CommandText}", inner)
|
||||
{
|
||||
this.Command = command;
|
||||
|
||||
this.ErrorCode = errorCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -182,13 +182,13 @@ namespace MontoyaTech.MySqlPlus
|
||||
innerException = innerException.InnerException;
|
||||
|
||||
//Try to get the MySql error code
|
||||
int code = -1;
|
||||
int errorCode = -1;
|
||||
if (ex is MySqlException)
|
||||
code = ((MySqlException)ex).Number;
|
||||
errorCode = ((MySqlException)ex).Number;
|
||||
|
||||
//See if we have reached our max retry.
|
||||
if (i + 1 >= maxRetrys || !retry)
|
||||
throw new MySqlCommandException(command, ex);
|
||||
throw new MySqlCommandException(command, errorCode, ex);
|
||||
|
||||
//See if the connection was invalid
|
||||
if (innerException.GetType().IsAssignableFrom(typeof(System.Net.Sockets.SocketException)) ||
|
||||
@ -200,12 +200,12 @@ namespace MontoyaTech.MySqlPlus
|
||||
{
|
||||
//Attempt to reconnect, but if this fails, it means we can't try any more since the reconnect retrys more than once.
|
||||
if (!this.Reconnect(maxRetrys, exponentialBackoff))
|
||||
throw new MySqlCommandException(command, ex);
|
||||
throw new MySqlCommandException(command, errorCode, ex);
|
||||
}
|
||||
//See if we should retry or just throw.
|
||||
else if (!ShouldRetryBasedOnMySqlErrorNum(code))
|
||||
else if (!ShouldRetry(errorCode))
|
||||
{
|
||||
throw new MySqlCommandException(command, ex);
|
||||
throw new MySqlCommandException(command, errorCode, ex);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -259,13 +259,13 @@ namespace MontoyaTech.MySqlPlus
|
||||
innerException = innerException.InnerException;
|
||||
|
||||
//Try to get the MySql error code if we can
|
||||
int code = -1;
|
||||
int errorCode = -1;
|
||||
if (ex is MySqlException)
|
||||
code = ((MySqlException)ex).Number;
|
||||
errorCode = ((MySqlException)ex).Number;
|
||||
|
||||
//See if we have reached our max retry.
|
||||
if (i + 1 >= maxRetrys || !retry)
|
||||
throw new MySqlCommandException(command, ex);
|
||||
throw new MySqlCommandException(command, errorCode, ex);
|
||||
|
||||
//See if the connection was invalid
|
||||
if (innerException.GetType().IsAssignableFrom(typeof(System.Net.Sockets.SocketException)) ||
|
||||
@ -277,12 +277,12 @@ namespace MontoyaTech.MySqlPlus
|
||||
{
|
||||
//Attempt to reconnect, but if this fails, it means we can't try any more since the reconnect retrys more than once.
|
||||
if (!this.Reconnect(maxRetrys, exponentialBackoff))
|
||||
throw new MySqlCommandException(command, ex);
|
||||
throw new MySqlCommandException(command, errorCode, ex);
|
||||
}
|
||||
//See if we should retry or just throw.
|
||||
else if (!ShouldRetryBasedOnMySqlErrorNum(code))
|
||||
else if (!ShouldRetry(errorCode))
|
||||
{
|
||||
throw new MySqlCommandException(command, ex);
|
||||
throw new MySqlCommandException(command, errorCode, ex);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -300,14 +300,14 @@ namespace MontoyaTech.MySqlPlus
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether or not we should retry a query based on the MySql error number.
|
||||
/// Returns whether or not we should retry a query based on the MySql error code.
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="errorCode"></param>
|
||||
/// <returns></returns>
|
||||
private static bool ShouldRetryBasedOnMySqlErrorNum(int number)
|
||||
private static bool ShouldRetry(int errorCode)
|
||||
{
|
||||
//List of codes here: https://www.briandunning.com/error-codes/?source=MySQL
|
||||
switch (number)
|
||||
switch (errorCode)
|
||||
{
|
||||
case 1021:
|
||||
case 1023:
|
||||
|
@ -7,7 +7,7 @@
|
||||
<AssemblyName>MontoyaTech.MySqlPlus</AssemblyName>
|
||||
<RootNamespace>MontoyaTech.MySqlPlus</RootNamespace>
|
||||
<Title>MontoyaTech.MySqlPlus</Title>
|
||||
<Version>1.0.8</Version>
|
||||
<Version>1.0.9</Version>
|
||||
<Company>MontoyaTech</Company>
|
||||
<Description>A simple C# library to help work with MySql.</Description>
|
||||
<Copyright>MontoyaTech 2023</Copyright>
|
||||
|
Loading…
x
Reference in New Issue
Block a user