OdbcError.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //
  2. // System.Data.Odbc.OdbcError
  3. //
  4. // Author:
  5. // Brian Ritchie ([email protected])
  6. //
  7. // Copyright (C) Brian Ritchie, 2002
  8. //
  9. using System.Collections;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Data.Common;
  13. namespace System.Data.Odbc
  14. {
  15. public class OdbcError
  16. {
  17. string message,source,sqlstate;
  18. int nativeerror;
  19. #region Constructors
  20. internal OdbcError(string Source)
  21. {
  22. nativeerror=1;
  23. source=Source;
  24. message="Error in "+source;
  25. sqlstate="";
  26. }
  27. internal OdbcError(string Source, OdbcHandleType HandleType, IntPtr Handle)
  28. {
  29. short buflen=256,txtlen=0;
  30. OdbcReturn ret=OdbcReturn.Success;
  31. byte[] buf_MsgText=new byte[buflen];
  32. byte[] buf_SqlState=new byte[buflen];
  33. bool NeedsDecode=true;
  34. this.source=Source;
  35. switch (HandleType)
  36. {
  37. case OdbcHandleType.Dbc:
  38. ret=libodbc.SQLError(IntPtr.Zero,Handle,IntPtr.Zero, buf_SqlState,
  39. ref nativeerror, buf_MsgText, buflen, ref txtlen);
  40. break;
  41. case OdbcHandleType.Stmt:
  42. ret=libodbc.SQLError(IntPtr.Zero,IntPtr.Zero,Handle, buf_SqlState,
  43. ref nativeerror, buf_MsgText, buflen, ref txtlen);
  44. break;
  45. case OdbcHandleType.Env:
  46. ret=libodbc.SQLError(Handle,IntPtr.Zero,IntPtr.Zero, buf_SqlState,
  47. ref nativeerror, buf_MsgText, buflen, ref txtlen);
  48. break;
  49. default:
  50. nativeerror=1;
  51. source=Source;
  52. message="Error in "+source;
  53. sqlstate="";
  54. NeedsDecode=false;
  55. break;
  56. }
  57. if (NeedsDecode)
  58. {
  59. if (ret!=OdbcReturn.Success)
  60. {
  61. nativeerror=1;
  62. source=Source;
  63. message="Unable to retreive error information from ODBC driver manager";
  64. sqlstate="";
  65. }
  66. else
  67. {
  68. sqlstate=System.Text.Encoding.Default.GetString(buf_SqlState).Replace((char) 0,' ').Trim();;
  69. message=System.Text.Encoding.Default.GetString(buf_MsgText).Replace((char) 0,' ').Trim();;
  70. }
  71. }
  72. }
  73. #endregion // Constructors
  74. #region Properties
  75. public string Message
  76. {
  77. get
  78. {
  79. return message;
  80. }
  81. }
  82. public int NativeError
  83. {
  84. get
  85. {
  86. return nativeerror;
  87. }
  88. }
  89. public string Source
  90. {
  91. get
  92. {
  93. return source;
  94. }
  95. }
  96. public string SQLState
  97. {
  98. get
  99. {
  100. return sqlstate;
  101. }
  102. }
  103. #endregion // Properties
  104. }
  105. }