SqlException.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. //
  2. // System.Data.SqlClient.SqlException.cs
  3. //
  4. // Author:
  5. // Rodrigo Moya ([email protected])
  6. // Daniel Morgan ([email protected])
  7. // Tim Coleman ([email protected])
  8. //
  9. // (C) Ximian, Inc
  10. // Copyright (C) Tim Coleman, 2002
  11. //
  12. using Mono.Data.TdsClient.Internal;
  13. using System;
  14. using System.Data;
  15. using System.Runtime.Serialization;
  16. namespace System.Data.SqlClient {
  17. [Serializable]
  18. public sealed class SqlException : SystemException
  19. {
  20. private SqlErrorCollection errors;
  21. internal SqlException()
  22. : base ("a SQL Exception has occurred.")
  23. {
  24. errors = new SqlErrorCollection();
  25. }
  26. internal SqlException (byte theClass, int lineNumber, string message, int number, string procedure, string server, string source, byte state)
  27. : base (message)
  28. {
  29. errors = new SqlErrorCollection (theClass, lineNumber, message, number, procedure, server, source, state);
  30. }
  31. #region Properties
  32. [MonoTODO]
  33. public byte Class {
  34. get {
  35. if(errors.Count == 0)
  36. return 0; // FIXME: throw exception here?
  37. else
  38. return errors[0].Class;
  39. }
  40. set { errors[0].SetClass(value); }
  41. }
  42. [MonoTODO]
  43. public SqlErrorCollection Errors
  44. {
  45. get { return errors; }
  46. set { errors = value; }
  47. }
  48. [MonoTODO]
  49. public int LineNumber {
  50. get { if(errors.Count == 0)
  51. return 0; // FIXME: throw exception here?
  52. return errors[0].LineNumber;
  53. }
  54. set { errors[0].SetLineNumber(value); }
  55. }
  56. [MonoTODO]
  57. public override string Message {
  58. get {
  59. if(errors.Count == 0)
  60. return ""; // FIXME: throw exception?
  61. else {
  62. String msg = "";
  63. int i = 0;
  64. for(i = 0; i < errors.Count - 1; i++) {
  65. msg = msg + errors[i].Message + "\n";
  66. }
  67. msg = msg + errors[i].Message;
  68. return msg;
  69. }
  70. }
  71. }
  72. [MonoTODO]
  73. public int Number {
  74. get {
  75. if(errors.Count == 0)
  76. return 0; // FIXME: throw exception?
  77. else
  78. return errors[0].Number;
  79. }
  80. set { errors[0].SetNumber(value); }
  81. }
  82. [MonoTODO]
  83. public string Procedure {
  84. get {
  85. if(errors.Count == 0)
  86. return ""; // FIXME: throw exception?
  87. else
  88. return errors[0].Procedure;
  89. }
  90. set { errors[0].SetProcedure(value); }
  91. }
  92. [MonoTODO]
  93. public string Server {
  94. get {
  95. if(errors.Count == 0)
  96. return ""; // FIXME: throw exception?
  97. else
  98. return errors[0].Server;
  99. }
  100. set { errors[0].SetServer(value); }
  101. }
  102. [MonoTODO]
  103. public override string Source {
  104. get {
  105. if(errors.Count == 0)
  106. return ""; // FIXME: throw exception?
  107. else
  108. return errors[0].Source;
  109. }
  110. set { errors[0].SetSource(value); }
  111. }
  112. [MonoTODO]
  113. public byte State {
  114. get {
  115. if(errors.Count == 0)
  116. return 0; // FIXME: throw exception?
  117. else
  118. return errors[0].State;
  119. }
  120. set { errors[0].SetState(value); }
  121. }
  122. #endregion // Properties
  123. #region Methods
  124. [MonoTODO]
  125. public override void GetObjectData(SerializationInfo si, StreamingContext context)
  126. {
  127. throw new NotImplementedException ();
  128. }
  129. [MonoTODO]
  130. internal static SqlException FromTdsError (TdsPacketErrorResultCollection errors)
  131. {
  132. TdsMessage message = errors[0].Message;
  133. return new SqlException (message.Severity, message.Line, message.Message, message.Number, message.ProcName, message.Server, "Mono SqlClient Data Provider", message.State);
  134. }
  135. #endregion // Methods
  136. }
  137. }