2004-03-17 Umadevi S (sumadevi@novell.com)
[mono.git] / mcs / class / System.Data / System.Data.OleDb / OleDbException.cs
1 //
2 // System.Data.OleDb.OleDbException
3 //
4 // Author:
5 //   Rodrigo Moya (rodrigo@ximian.com)
6 //   Tim Coleman (tim@timcoleman.com)
7 //
8 // Copyright (C) Rodrigo Moya, 2002
9 // Copyright (C) Tim Coleman, 2002
10 //
11
12 using System.Data;
13 using System.Data.Common;
14 using System.Runtime.InteropServices;
15 using System.Runtime.Serialization;
16
17 namespace System.Data.OleDb
18 {
19         [Serializable]
20         public sealed class OleDbException : ExternalException
21         {
22                 private OleDbConnection connection;
23                 
24                 #region Constructors
25
26                 internal OleDbException (OleDbConnection cnc)
27                 {
28                         connection = cnc;
29                 }
30                 
31                 #endregion // Constructors
32                 
33                 #region Properties
34
35                 public override int ErrorCode { 
36                         get {
37                                 GdaList glist;
38                                 IntPtr errors;
39
40                                 errors = libgda.gda_connection_get_errors (connection.GdaConnection);
41                                 if (errors != IntPtr.Zero) {
42                                         glist = (GdaList) Marshal.PtrToStructure (errors, typeof (GdaList));
43                                         return (int) libgda.gda_error_get_number (glist.data);
44                                 }
45
46                                 return -1;
47                         }
48                 }
49
50                 public OleDbErrorCollection Errors {
51                         get {
52                                 GdaList glist;
53                                 IntPtr errors;
54                                 OleDbErrorCollection col = new OleDbErrorCollection ();
55                                 
56                                 errors = libgda.gda_connection_get_errors (connection.GdaConnection);
57                                 if (errors != IntPtr.Zero) {
58                                         glist = (GdaList) Marshal.PtrToStructure (errors, typeof (GdaList));
59                                         while (glist != null) {
60                                                 col.Add (new OleDbError (
61                                                                  libgda.gda_error_get_description (glist.data),
62                                                                  (int) libgda.gda_error_get_number (glist.data),
63                                                                  libgda.gda_error_get_source (glist.data),
64                                                                  libgda.gda_error_get_sqlstate (glist.data)));
65                                                 glist = (GdaList) Marshal.PtrToStructure (glist.next,
66                                                                                           typeof (GdaList));
67                                         }
68                                 }
69
70                                 return col;
71                         }
72                 }
73
74                 public override string Message {        
75                         get {
76                                 GdaList glist;
77                                 IntPtr errors;
78                                 string msg = "";
79
80                                 errors = libgda.gda_connection_get_errors (connection.GdaConnection);
81                                 if (errors != IntPtr.Zero) {
82                                         glist = (GdaList) Marshal.PtrToStructure (errors, typeof (GdaList));
83                                         while (glist != null) {
84                                                 msg = msg + ";" +  libgda.gda_error_get_description (glist.data);
85                                                 glist = (GdaList) Marshal.PtrToStructure (glist.next,
86                                                                                           typeof (GdaList));
87                                         }
88
89                                         return msg;
90                                 }
91
92                                 return null;
93                         }
94                 }
95
96                 public override string Source { 
97                         get {
98                                 GdaList glist;
99                                 IntPtr errors;
100
101                                 errors = libgda.gda_connection_get_errors (connection.GdaConnection);
102                                 if (errors != IntPtr.Zero) {
103                                         glist = (GdaList) Marshal.PtrToStructure (errors, typeof (GdaList));
104                                         return libgda.gda_error_get_source (glist.data);
105                                 }
106
107                                 return null;
108                         }
109                 }
110
111                 #endregion // Properties
112
113                 #region Methods
114
115                 [MonoTODO]
116                 public override void GetObjectData (SerializationInfo si, StreamingContext context)
117                 {
118                         throw new NotImplementedException ();
119                 }
120
121                 #endregion // Methods
122         }
123 }