using System; using System.Collections.Generic; using System.Text; namespace Apewer.Source { /// <summary>表示在执行 SQL 语句执行过程中发生的错误。</summary> [Serializable] public sealed class SqlException : Exception { const string EmptyMessage = "(无消息)"; string _msg = null; string _sql = null; /// <summary>获取描述当前异常的消息。</summary> public override string Message { get => _msg; } /// <summary>获取引发异常的 SQL 语句。</summary> public string Statement { get => _sql; } /// <summary>初始化 <see cref="SqlException"/> 类的新实例。</summary> /// <param name="message">描述当前异常的消息。</param> /// <param name="statement">附带 SQL 语句。</param> public SqlException(string message, string statement = null) { _msg = string.IsNullOrEmpty(message) ? EmptyMessage : message; _sql = statement; } /// <summary>初始化 <see cref="SqlException"/> 类的新实例。</summary> /// <param name="query">用于获取消息的查询结果。</param> /// <param name="statement">附带 SQL 语句。</param> public SqlException(IQuery query, string statement = null) { if (query == null) { _msg = "查询结果实例无效。"; _sql = statement; return; } _msg = query.Message; if (string.IsNullOrEmpty(_msg)) _msg = EmptyMessage; _sql = statement; } /// <summary>初始化 <see cref="SqlException"/> 类的新实例。</summary> /// <param name="execute">用于获取消息的执行结果。</param> /// <param name="statement">附带 SQL 语句。</param> public SqlException(IExecute execute, string statement = null) { if (execute == null) { _msg = "执行结果实例无效。"; return; } _msg = execute.Message; if (string.IsNullOrEmpty(_msg)) _msg = EmptyMessage; _sql = statement; } } }