using System; using System.Data.Common; using System.IO; using System.Net.Sockets; using System.Runtime.Serialization; namespace Npgsql; /// /// The exception that is thrown when server-related issues occur. /// /// /// PostgreSQL errors (e.g. query SQL issues, constraint violations) are raised via /// which is a subclass of this class. /// Purely Npgsql-related issues which aren't related to the server will be raised /// via the standard CLR exceptions (e.g. ArgumentException). /// [Serializable] public class NpgsqlException : DbException { /// /// Initializes a new instance of the class. /// public NpgsqlException() {} /// /// Initializes a new instance of the class with a specified error message and a reference to the inner exception that is the cause of this exception. /// /// The error message that explains the reason for the exception. /// The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified. public NpgsqlException(string? message, Exception? innerException) : base(message, innerException) {} /// /// Initializes a new instance of the class with a specified error message. /// /// The message that describes the error. public NpgsqlException(string? message) : base(message) { } /// /// Specifies whether the exception is considered transient, that is, whether retrying the operation could /// succeed (e.g. a network error or a timeout). /// #if NET5_0_OR_GREATER public override bool IsTransient #else public virtual bool IsTransient #endif => InnerException is IOException or SocketException or TimeoutException or NpgsqlException { IsTransient: true }; #if NET6_0_OR_GREATER /// public new NpgsqlBatchCommand? BatchCommand { get; set; } /// protected override DbBatchCommand? DbBatchCommand => BatchCommand; #else /// /// If the exception was thrown as a result of executing a , references the within /// the batch which triggered the exception. Otherwise . /// public NpgsqlBatchCommand? BatchCommand { get; set; } #endif #region Serialization /// /// Initializes a new instance of the class with serialized data. /// /// The SerializationInfo that holds the serialized object data about the exception being thrown. /// The StreamingContext that contains contextual information about the source or destination. protected internal NpgsqlException(SerializationInfo info, StreamingContext context) : base(info, context) {} #endregion }