Modified SQLDescribeCol to work around bug in pinvoke...when doing a ref on a typed...
[mono.git] / mcs / class / System.Data / System.Data.Odbc / libodbc.cs
1 //
2 // System.Data.Odbc.libodbc
3 //
4 // Authors:
5 //   Brian Ritchie (brianlritchie@hotmail.com) 
6 //  
7 //
8 // Copyright (C) Brian Ritchie, 2002
9 // 
10 //
11
12 using System.Data;
13 using System.Data.Common;
14 using System.Runtime.InteropServices;
15
16 namespace System.Data.Odbc
17 {
18         internal enum OdbcHandleType : ushort {
19                 Env = 1,
20                 Dbc = 2,
21                 Stmt = 3,
22                 Desc = 4
23         };
24
25         internal enum OdbcReturn : short {
26                 Error = -1,
27                 InvalidHandle = -2,
28                 StillExecuting = 2,
29                 NeedData = 99,
30                 Success = 0,
31                 SuccessWithInfo = 1,
32                 NoData=100
33         }
34
35         internal enum OdbcEnv : ushort {
36                 OdbcVersion = 200,
37                 ConnectionPooling = 201,
38                 CPMatch = 202
39         }
40
41         [StructLayout(LayoutKind.Sequential)]
42         internal struct OdbcTimestamp
43         {
44                 public short year;
45                 public ushort month;
46                 public ushort day;
47                 public ushort hour;
48                 public ushort minute;
49                 public ushort second;
50                 public ulong fraction;
51         }
52
53         
54 //      sealed internal class libodbc
55         internal class libodbc
56         {
57                 [DllImport("odbc32.dll")]
58                 public static extern OdbcReturn SQLAllocHandle (OdbcHandleType HandleType, IntPtr InputHandle, ref IntPtr OutputHandlePtr);
59
60                 [DllImport("odbc32.dll")]
61                 public static extern OdbcReturn SQLSetEnvAttr (IntPtr EnvHandle, OdbcEnv Attribute, IntPtr Value, int StringLength);
62
63                 [DllImport("odbc32.dll")]
64                 public static extern OdbcReturn SQLConnect (IntPtr ConnectionHandle, string ServerName, short NameLength1, string UserName, short NameLength2, string Authentication, short NameLength3);
65
66                 [DllImport("odbc32.dll")]
67                 public static extern OdbcReturn  SQLDriverConnect(IntPtr ConnectionHandle, IntPtr WindowHandle, string InConnectionString, short StringLength1, string OutConnectionString, short BufferLength, ref short StringLength2Ptr,     ushort DriverCompletion);
68
69                 [DllImport("odbc32.dll")]
70                 public static extern OdbcReturn SQLExecDirect (IntPtr StatementHandle, string StatementText, int TextLength);
71
72                 [DllImport("odbc32.dll")]
73                 public static extern OdbcReturn SQLRowCount (IntPtr StatementHandle, ref int RowCount);
74
75                 [DllImport("odbc32.dll")]
76                 public static extern OdbcReturn SQLNumResultCols (IntPtr StatementHandle, ref short ColumnCount);
77
78                 [DllImport("odbc32.dll")]
79                 public static extern OdbcReturn SQLFetch (IntPtr StatementHandle);
80
81                 [DllImport("odbc32.dll")]
82                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref bool TargetPtr, int BufferLen, ref int Len);
83
84                 [DllImport("odbc32.dll")]
85                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref double TargetPtr, int BufferLen, ref int Len);
86
87                 [DllImport("odbc32.dll")]
88                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref long TargetPtr, int BufferLen, ref int Len);
89
90                 [DllImport("odbc32.dll")]
91                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref short TargetPtr, int BufferLen, ref int Len);
92
93                 [DllImport("odbc32.dll")]
94                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref float TargetPtr, int BufferLen, ref int Len);
95         
96                 [DllImport("odbc32.dll")]
97                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref OdbcTimestamp TargetPtr, int BufferLen, ref int Len);
98
99                 [DllImport("odbc32.dll")]
100                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, ref int TargetPtr, int BufferLen, ref int Len);
101         
102                 [DllImport("odbc32.dll")]
103                 public static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, OdbcType TargetType, byte[] TargetPtr, int BufferLen, ref int Len);
104
105                 [DllImport("odbc32.dll")]
106                 public static extern OdbcReturn SQLDescribeCol(IntPtr StatementHandle, ushort ColumnNumber, byte[] ColumnName, short BufferLength, ref short NameLength, ref short DataType, ref short ColumnSize, ref short DecimalDigits, ref short Nullable);
107
108                 [DllImport("odbc32.dll")]
109                 public static extern OdbcReturn SQLFreeHandle(ushort HandleType, IntPtr SqlHandle);
110
111                 [DllImport("odbc32.dll")]
112                 public static extern OdbcReturn SQLDisconnect(IntPtr ConnectionHandle);
113
114                 [DllImport("odbc32.dll")]
115                 public static extern OdbcReturn SQLPrepare(IntPtr StatementHandle, string Statement, int TextLength);
116
117                 [DllImport("odbc32.dll")]
118                 public static extern OdbcReturn SQLExecute(IntPtr StatementHandle);
119
120                 [DllImport("odbc32.dll")]
121                 public static extern OdbcReturn SQLSetConnectAttr(IntPtr ConnectionHandle, int Attribute, uint Value, int Length);
122
123                 [DllImport("odbc32.dll")]
124                 public static extern OdbcReturn SQLEndTran(int HandleType, IntPtr Handle, short CompletionType);
125
126                 [DllImport("odbc32.dll")]
127                 public static extern OdbcReturn SQLBindParam(IntPtr StatementHandle, short ParamNum, short ValueType,
128                                 short ParamType, int LenPrecision, short ParamScale, ref int ParamValue, int StrLen);
129
130                 [DllImport("odbc32.dll")]
131                 public static extern OdbcReturn SQLBindParam(IntPtr StatementHandle, short ParamNum, short ValueType,
132                                 short ParamType, int LenPrecision, short ParamScale, byte[] ParamValue, int StrLen);
133
134                 [DllImport("odbc32.dll")]
135                 public static extern OdbcReturn SQLCancel(IntPtr StatementHandle);
136                 
137                 [DllImport("odbc32.dll")]
138                 public static extern OdbcReturn SQLCloseCursor(IntPtr StatementHandle);
139         }
140 }