.NET 3.x Значение было недопустимо малым или недопустимо большим для UInt32 - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, есть парсер sqllite таблиц, нашел на просторах интернета и возникает такая беда при чтении таблиц, если в таблице есть данные, то всё ок, если их нет вообще, пустая таблица то возникает исключение и ничего не работает. Соответственно читая в цикле 5-10 таблиц и т.д. всё рушиться из-за этой ошибки. Sqlitehandler.cs
Листинг программы
  1. private bool ReadTableFromOffset(ulong Offset)
  2. {
  3. if (db_bytes[(int) Offset] == 13)
  4. {
  5. Вот тут возникает исключение ushort num2 = Convert.ToUInt16(decimal.Subtract(new decimal(ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)), decimal.One)); // пишет что, вот тут возникает ошибка Значение было недопустимо малым или недопустимо большим для UInt32
  6. int length = 0;
  7. if (table_entries != null)
  8. {
  9. length = table_entries.Length;
  10. table_entries =
  11. (table_entry[])
  12. Utils.CopyArray(table_entries, new table_entry[(table_entries.Length + num2) + 1]);
  13. }
  14. else
  15. {
  16. table_entries = new table_entry[num2 + 1];
  17. }
  18. int num16 = num2;
  19. for (int i = 0; i <= num16; i++)
  20. {
  21. record_header_field[] _fieldArray = null;
  22. ulong num =
  23. ConvertToInteger(
  24. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(Offset), 8M), new decimal(i*2))), 2);
  25. if (decimal.Compare(new decimal(Offset), 100M) != 0)
  26. {
  27. num += Offset;
  28. }
  29. int endIndex = GVL((int) num);
  30. long num9 = CVL((int) num, endIndex);
  31. int num8 =
  32. GVL(
  33. Convert.ToInt32(
  34. decimal.Add(
  35. decimal.Add(new decimal(num),
  36. decimal.Subtract(new decimal(endIndex), new decimal(num))), decimal.One)));
  37. table_entries[length + i].row_id =
  38. CVL(
  39. Convert.ToInt32(
  40. decimal.Add(
  41. decimal.Add(new decimal(num),
  42. decimal.Subtract(new decimal(endIndex), new decimal(num))), decimal.One)), num8);
  43. num =
  44. Convert.ToUInt64(
  45. decimal.Add(
  46. decimal.Add(new decimal(num), decimal.Subtract(new decimal(num8), new decimal(num))),
  47. decimal.One));
  48. endIndex = GVL((int) num);
  49. num8 = endIndex;
  50. long num7 = CVL((int) num, endIndex);
  51. long num10 =
  52. Convert.ToInt64(decimal.Add(decimal.Subtract(new decimal(num), new decimal(endIndex)),
  53. decimal.One));
  54. for (int j = 0; num10 < num7; j++)
  55. {
  56. _fieldArray =
  57. (record_header_field[]) Utils.CopyArray(_fieldArray, new record_header_field[j + 1]);
  58. endIndex = num8 + 1;
  59. num8 = GVL(endIndex);
  60. _fieldArray[j].type = CVL(endIndex, num8);
  61. if (_fieldArray[j].type > 9L)
  62. {
  63. if (IsOdd(_fieldArray[j].type))
  64. {
  65. _fieldArray[j].size = (long) Math.Round((_fieldArray[j].type - 13L)/2.0);
  66. }
  67. else
  68. {
  69. _fieldArray[j].size = (long) Math.Round((_fieldArray[j].type - 12L)/2.0);
  70. }
  71. }
  72. else
  73. {
  74. _fieldArray[j].size = SQLDataTypeSize[(int) _fieldArray[j].type];
  75. }
  76. num10 = (num10 + (num8 - endIndex)) + 1L;
  77. }
  78. if (_fieldArray != null)
  79. {
  80. table_entries[length + i].content = new string[(_fieldArray.Length - 1) + 1];
  81. int num4 = 0;
  82. int num17 = _fieldArray.Length - 1;
  83. for (int k = 0; k <= num17; k++)
  84. {
  85. if (_fieldArray[k].type > 9L)
  86. {
  87. if (!IsOdd(_fieldArray[k].type))
  88. {
  89. if (decimal.Compare(new decimal(encoding), decimal.One) == 0)
  90. {
  91. table_entries[length + i].content[k] = Encoding.Default.GetString(db_bytes,
  92. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)),
  93. new decimal(num4))), (int) _fieldArray[k].size);
  94. }
  95. else if (decimal.Compare(new decimal(encoding), 2M) == 0)
  96. {
  97. table_entries[length + i].content[k] = Encoding.Unicode.GetString(db_bytes,
  98. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)),
  99. new decimal(num4))), (int) _fieldArray[k].size);
  100. }
  101. else if (decimal.Compare(new decimal(encoding), 3M) == 0)
  102. {
  103. table_entries[length + i].content[k] = Encoding.BigEndianUnicode.GetString(
  104. db_bytes,
  105. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)),
  106. new decimal(num4))), (int) _fieldArray[k].size);
  107. }
  108. }
  109. else
  110. {
  111. table_entries[length + i].content[k] = Encoding.Default.GetString(db_bytes,
  112. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)),
  113. new decimal(num4))), (int) _fieldArray[k].size);
  114. }
  115. }
  116. else
  117. {
  118. table_entries[length + i].content[k] =
  119. Conversions.ToString(
  120. ConvertToInteger(
  121. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(num), new decimal(num7)),
  122. new decimal(num4))), (int) _fieldArray[k].size));
  123. }
  124. num4 += (int) _fieldArray[k].size;
  125. }
  126. }
  127. }
  128. }
  129. else if (db_bytes[(int) Offset] == 5)
  130. {
  131. ushort num14 =
  132. Convert.ToUInt16(
  133. decimal.Subtract(
  134. new decimal(ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)),
  135. decimal.One));
  136. int num18 = num14;
  137. for (int m = 0; m <= num18; m++)
  138. {
  139. ushort num13 =
  140. (ushort)
  141. ConvertToInteger(
  142. Convert.ToInt32(decimal.Add(decimal.Add(new decimal(Offset), 12M), new decimal(m*2))), 2);
  143. ReadTableFromOffset(
  144. Convert.ToUInt64(
  145. decimal.Multiply(
  146. decimal.Subtract(new decimal(ConvertToInteger((int) (Offset + num13), 4)), decimal.One),
  147. new decimal(page_size))));
  148. }
  149. ReadTableFromOffset(
  150. Convert.ToUInt64(
  151. decimal.Multiply(
  152. decimal.Subtract(
  153. new decimal(ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 8M)), 4)),
  154. decimal.One), new decimal(page_size))));
  155. }
  156. return true;
  157. }
System.Collections.ListDictionaryInternal в System.Decimal.ToUInt32(Decimal d) в System.Decimal.ToUInt16(Decimal value) в System.Decimal.op_Explicit(Decimal value) в ConsoleApplication2.SQLiteHandler.ReadTableFromOffset(UInt64 Offset) в c:\Users\westc_000\Documents\Visual Studio 2013\Projects\WpfApplication8\WpfApplication8\SQLiteHandler.cs:строка 440 в ConsoleApplication2.SQLiteHandler.ReadTable(String TableName) в c:\Users\westc_000\Documents\Visual Studio 2013\Projects\WpfApplication8\WpfApplication8\SQLiteHandler.cs:строка 431 в Steamfake_2.Cookies.Chrome_based_.ChromeCookies.Cookies(String output) в c:\Users\westc_000\Documents\Visual Studio 2013\Projects\WpfApplication8\WpfApplication8\Cookies\Chrome(based)\ChromeCookies.cs:строка 50 в WpfApplication8.MainWindow..ctor() в c:\Users\westc_000\Documents\Visual Studio 2013\Projects\WpfApplication8\WpfApplication8\MainWindow.xaml.cs:строка 38Значение было недопустимо малым или недопустимо большим для UInt32.mscorlib
Листинг программы
  1. ushort num2 = Convert.ToUInt16(decimal.Subtract(new decimal(ConvertToInteger(Convert.ToInt32(decimal.Add(new decimal(Offset), 3M)), 2)), decimal.One)); // Пишет что тут возникает ошибка overflowexception
Может кто помочь как избавиться от этой ошибки, спасибо заранее.

Решение задачи: «.NET 3.x Значение было недопустимо малым или недопустимо большим для UInt32»

textual
Листинг программы
  1. table_entries[length + i].content[k] = Encoding.Default.GetString(
  2.     db_bytes,
  3.     (int)(num + (ulong)num7 + (ulong)num4),
  4.     (int)_fieldArray[k].size
  5. );

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы