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