| | | 1 | | using Microsoft.Data.SqlClient; |
| | | 2 | | |
| | | 3 | | // ReSharper disable once CheckNamespace |
| | | 4 | | namespace Microsoft.EntityFrameworkCore; |
| | | 5 | | |
| | | 6 | | /// <summary>Errors for a <see cref="SqlException"/> raised outside <c>SaveChanges</c>, by SQL Server error number. Type |
| | | 7 | | public static class SqlExceptions |
| | | 8 | | { |
| | | 9 | | private const string DatabaseError = nameof( DatabaseError ); |
| | | 10 | | |
| | | 11 | | |
| | | 12 | | /// <summary>A custom <c>RAISERROR</c> / <c>THROW</c> (SQL 50000).</summary> |
| | | 13 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 14 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 15 | | /// <returns>The <c>CustomException</c> error (severity Medium).</returns> |
| | | 16 | | public static Error CustomException( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = n |
| | 3 | 17 | | => new( nameof( CustomException ), DatabaseError, "حدث خطأ مخصص", "A custom (RAISERROR) error occurred", Severit |
| | 3 | 18 | | additionalData ); |
| | | 19 | | |
| | | 20 | | /// <summary>The database login failed (SQL 18456).</summary> |
| | | 21 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 22 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 23 | | /// <returns>The <c>DataBaseAuthenticationFailed</c> error (severity High).</returns> |
| | | 24 | | public static Error DataBaseAuthenticationFailed( SqlException exception, IReadOnlyDictionary<string, object>? addit |
| | 0 | 25 | | => new( nameof( DataBaseAuthenticationFailed ), DatabaseError, "اسم المستخدم أو كلمة المرور لقاعدة البيانات غير |
| | 0 | 26 | | "DataBase User Or Password is incorrect", Severity.High, exception, additionalData ); |
| | | 27 | | |
| | | 28 | | /// <summary>The server or database can't be reached (SQL -1, 2, 1225, 4060).</summary> |
| | | 29 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 30 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 31 | | /// <returns>The <c>DatabaseNotAccessible</c> error (severity High).</returns> |
| | | 32 | | public static Error DatabaseNotAccessible( SqlException exception, IReadOnlyDictionary<string, object>? additionalDa |
| | 0 | 33 | | => new( nameof( DatabaseNotAccessible ), DatabaseError, "لا يمكن الوصول إلى قاعدة البيانات", "Cannot access the |
| | 0 | 34 | | exception, additionalData ); |
| | | 35 | | |
| | | 36 | | /// <summary>The transaction was chosen as a deadlock victim (SQL 1205). Safe to retry.</summary> |
| | | 37 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 38 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 39 | | /// <returns>The <c>DeadlockVictim</c> error (severity Medium).</returns> |
| | | 40 | | public static Error DeadlockVictim( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = nu |
| | 0 | 41 | | => new( nameof( DeadlockVictim ), DatabaseError, "تم الوصول إلى الموارد بترتيب متعارض في معاملات منفصلة، مما يسب |
| | 0 | 42 | | "Resources are accessed in conflicting order on separate transactions, causing a deadlock", Severity.Med |
| | | 43 | | |
| | | 44 | | /// <summary>A value violates a foreign key (SQL 547).</summary> |
| | | 45 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 46 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 47 | | /// <returns>The <c>ForeignKey</c> error (severity Medium).</returns> |
| | | 48 | | public static Error ForeignKey( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null ) |
| | 0 | 49 | | => new( nameof( ForeignKey ), DatabaseError, "القيمة تنتهك قيد المفتاح الخارجي", "Value violates foreign key con |
| | 0 | 50 | | exception, additionalData ); |
| | | 51 | | |
| | | 52 | | /// <summary>A value can't be converted, e.g. a date string (SQL 241).</summary> |
| | | 53 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 54 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 55 | | /// <returns>The <c>InvalidData</c> error (severity High).</returns> |
| | | 56 | | public static Error InvalidData( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null |
| | 0 | 57 | | => new( nameof( InvalidData ), DatabaseError, "البيانات غير صالحة (تجاوز السلسلة أو الرقم، أو تحويل نوع البيانات |
| | 0 | 58 | | "Data is invalid (string or number overflow, or datatype conversion, or foreign key constraint)", Severi |
| | 0 | 59 | | additionalData ); |
| | | 60 | | |
| | | 61 | | /// <summary>A number overflows its column type (SQL 8115).</summary> |
| | | 62 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 63 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 64 | | /// <returns>The <c>InvalidType</c> error (severity Medium).</returns> |
| | | 65 | | public static Error InvalidType( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null |
| | 0 | 66 | | => new( nameof( InvalidType ), DatabaseError, "الرقم غير صالح لتعريف العمود", "Number is invalid for column defi |
| | 0 | 67 | | exception, additionalData ); |
| | | 68 | | |
| | | 69 | | /// <summary>The minimum query memory is not available.</summary> |
| | | 70 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 71 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 72 | | /// <returns>The <c>LowMemoryCondition</c> error (severity Medium).</returns> |
| | | 73 | | public static Error LowMemoryCondition( SqlException exception, IReadOnlyDictionary<string, object>? additionalData |
| | 0 | 74 | | => new( nameof( LowMemoryCondition ), DatabaseError, "تم رفض العملية المطلوبة لأن الحد الأدنى لذاكرة الاستعلام غ |
| | 0 | 75 | | "The requested operation was refused because the minimum query memory is not available", Severity.Medium |
| | | 76 | | |
| | | 77 | | /// <summary>A row is larger than the allowed maximum.</summary> |
| | | 78 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 79 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 80 | | /// <returns>The <c>MaximumSizeOfRow</c> error (severity Medium).</returns> |
| | | 81 | | public static Error MaximumSizeOfRow( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = |
| | 0 | 82 | | => new( nameof( MaximumSizeOfRow ), DatabaseError, "حجم الصف أكبر من الحد الأقصى المسموح به", "The row is larger |
| | 0 | 83 | | Severity.Medium, exception, additionalData ); |
| | | 84 | | |
| | | 85 | | /// <summary>A sub-query returned no data.</summary> |
| | | 86 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 87 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 88 | | /// <returns>The <c>NoDataFound</c> error (severity Medium).</returns> |
| | | 89 | | public static Error NoDataFound( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null |
| | 0 | 90 | | => new( nameof( NoDataFound ), DatabaseError, "لم يتم العثور على بيانات في الاستعلام الفرعي", "No data was found |
| | 0 | 91 | | exception, additionalData ); |
| | | 92 | | |
| | | 93 | | /// <summary>A non-null column got <c>NULL</c> (SQL 515).</summary> |
| | | 94 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 95 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 96 | | /// <returns>The <c>Null</c> error (severity Medium).</returns> |
| | | 97 | | public static Error Null( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null ) |
| | 4 | 98 | | => new( nameof( Null ), DatabaseError, "لا يسمح بقيمة فارغة في عمود غير فارغ", "Null value not allowed in non-nu |
| | 4 | 99 | | exception, additionalData ); |
| | | 100 | | |
| | | 101 | | /// <summary>SQL Server can't get a lock resource (SQL 1204).</summary> |
| | | 102 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 103 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 104 | | /// <returns>The <c>OutOfLocks</c> error (severity Medium).</returns> |
| | | 105 | | public static Error OutOfLocks( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null ) |
| | 0 | 106 | | => new( nameof( OutOfLocks ), DatabaseError, |
| | 0 | 107 | | "لا يمكن لمحرك قاعدة بيانات SQL Server الحصول على مورد LOCK في الوقت الحالي. أعد المحاولة عندما يكون هنا |
| | 0 | 108 | | "The SQL Server Database Engine cannot obtain a LOCK resource at this time. Retry when there are fewer a |
| | 0 | 109 | | Severity.Medium, exception, additionalData ); |
| | | 110 | | |
| | | 111 | | /// <summary>Not enough server memory to run the query (SQL 701, 8651).</summary> |
| | | 112 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 113 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 114 | | /// <returns>The <c>OutOfMemory</c> error (severity Medium).</returns> |
| | | 115 | | public static Error OutOfMemory( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null |
| | 0 | 116 | | => new( nameof( OutOfMemory ), DatabaseError, "لا يوجد ذاكرة كافية في النظام لتشغيل هذا الاستعلام. أعد تشغيل الا |
| | 0 | 117 | | "There is insufficient system memory to run this query. Run the query again", Severity.Medium, exception |
| | | 118 | | |
| | | 119 | | /// <summary>A row would be larger than the allowed maximum.</summary> |
| | | 120 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 121 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 122 | | /// <returns>The <c>OutofRange</c> error (severity Medium).</returns> |
| | | 123 | | public static Error OutofRange( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null ) |
| | 0 | 124 | | => new( nameof( OutofRange ), DatabaseError, "لا يمكن إنشاء صف أكبر من الحد الأقصى المسموح به", |
| | 0 | 125 | | "Cannot create a row larger than the allowable maximum.", Severity.Medium, exception, additionalData ); |
| | | 126 | | |
| | | 127 | | /// <summary>The request timed out or waited too long for a lock (SQL -2, 8645, 30053, 1222). Safe to retry.</summar |
| | | 128 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 129 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 130 | | /// <returns>The <c>RequestTimeout</c> error (severity Medium).</returns> |
| | | 131 | | public static Error RequestTimeout( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = nu |
| | 0 | 132 | | => new( nameof( RequestTimeout ), DatabaseError, "انتهى وقت الانتظار للخادم. أعد المحاولة", "The server request |
| | 0 | 133 | | Severity.Medium, exception, additionalData ); |
| | | 134 | | |
| | | 135 | | /// <summary>A string is longer than its column (SQL 8152).</summary> |
| | | 136 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 137 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 138 | | /// <returns>The <c>StringTooLong</c> error (severity Medium).</returns> |
| | | 139 | | public static Error StringTooLong( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = nul |
| | 0 | 140 | | => new( nameof( StringTooLong ), DatabaseError, "عدد الحروف المعطى اكثر من المطلوب", "The given text is longer t |
| | 0 | 141 | | Severity.Medium, exception, additionalData ); |
| | | 142 | | |
| | | 143 | | /// <summary>A sub-query returned more than one row, or a row is too large (SQL 512, 511).</summary> |
| | | 144 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 145 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 146 | | /// <returns>The <c>TooManyRows</c> error (severity Medium).</returns> |
| | | 147 | | public static Error TooManyRows( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null |
| | 0 | 148 | | => new( nameof( TooManyRows ), DatabaseError, "تم العثور على عدد كبير من الصفوف في الاستعلام الفرعي", "Too many |
| | 0 | 149 | | Severity.Medium, exception, additionalData ); |
| | | 150 | | |
| | | 151 | | /// <summary>A duplicate value violates a unique index or primary key (SQL 2627, 2601).</summary> |
| | | 152 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 153 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 154 | | /// <returns>The <c>UniqueConstraint</c> error (severity Medium).</returns> |
| | | 155 | | public static Error UniqueConstraint( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = |
| | 0 | 156 | | => new( nameof( UniqueConstraint ), DatabaseError, "قيمة مكررة تنتهك القيد الفريد (أو المفتاح الأساسي)", |
| | 0 | 157 | | "Duplicate value violates unique (or primary key) constraint", Severity.Medium, exception, additionalDat |
| | | 158 | | |
| | | 159 | | /// <summary>Any other SQL Server error.</summary> |
| | | 160 | | /// <param name="exception">The exception, kept for logs.</param> |
| | | 161 | | /// <param name="additionalData">Extra values for logs.</param> |
| | | 162 | | /// <returns>The <c>Unknown</c> error (severity Unknown).</returns> |
| | | 163 | | public static Error Unknown( SqlException exception, IReadOnlyDictionary<string, object>? additionalData = null ) |
| | 0 | 164 | | => new( nameof( Unknown ), DatabaseError, "حدث خطأ غير معروف في قاعدة البيانات", "An unknown database error occu |
| | 0 | 165 | | exception, additionalData ); |
| | | 166 | | } |