2 // System.Data.Odbc.libodbc
5 // Brian Ritchie (brianlritchie@hotmail.com)
6 // Sureshkumar T (tsureshkumar@novell.com)
9 // Copyright (C) Brian Ritchie, 2002
14 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
16 // Permission is hereby granted, free of charge, to any person obtaining
17 // a copy of this software and associated documentation files (the
18 // "Software"), to deal in the Software without restriction, including
19 // without limitation the rights to use, copy, modify, merge, publish,
20 // distribute, sublicense, and/or sell copies of the Software, and to
21 // permit persons to whom the Software is furnished to do so, subject to
22 // the following conditions:
24 // The above copyright notice and this permission notice shall be
25 // included in all copies or substantial portions of the Software.
27 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
32 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37 using System.Data.Common;
38 using System.Runtime.InteropServices;
40 namespace System.Data.Odbc
42 internal enum OdbcHandleType : short {
49 internal enum OdbcReturn : short {
59 internal enum OdbcEnv : ushort {
61 ConnectionPooling = 201,
65 internal enum OdbcConnectionAttribute : int
\r
68 TransactionIsolation=108,
72 internal enum OdbcInfo : ushort
81 internal enum OdbcInputOutputDirection : short
90 internal enum OdbcLengthIndicator : short
97 internal enum FieldIdentifier
99 AutoUniqueValue = 11, /* SQL_DESC_AUTO_UNIQUE_VALUE */
100 BaseColumnName = 22, /* SQL_DESC_BASE_COLUMN_NAME */
101 BaseTableName = 23, /* SQL_DESC_BASE_TABLE_NAME */
102 CaseSensitive = 12, /* SQL_DESC_CASE_SENSITIVE */
103 CatelogName = 17, /* SQL_DESC_CATALOG_NAME */
104 ConsiseType = 2, /* SQL_DESC_CONCISE_TYPE */
105 Count = 1001, /* SQL_DESC_COUNT */
106 DisplaySize = 6, /* SQL_DESC_DISPLAY_SIZE */
107 FixedPrecScale = 9, /* SQL_DESC_FIXED_PREC_SCALE */
108 Label = 18, /* SQL_DESC_LABEL */
109 Length = 1003, /* SQL_DESC_LENGTH */
110 LiteralPrefix = 27, /* SQL_DESC_LITERAL_PREFIX */
111 LiteralSuffix = 28, /* SQL_DESC_LITERAL_SUFFIX */
112 LocalTypeName = 29, /* SQL_DESC_LOCAL_TYPE_NAME */
113 Name = 1011, /* SQL_DESC_NAME */
114 Nullable = 1008, /* SQL_DESC_NULLABLE */
115 NumPrecRadix = 32, /* SQL_DESC_NUM_PREC_RADIX */
116 OctetLength = 1013, /* SQL_DESC_OCTET_LENGTH */
117 Precision = 1005, /* SQL_DESC_PRECISION */
118 Scale = 1006, /* SQL_DESC_SCALE */
119 SchemaName = 16, /* SQL_DESC_SCHEMA_NAME */
120 Searchable = 13, /* SQL_DESC_SEARCHABLE */
121 TableName = 15, /* SQL_DESC_TABLE_NAME */
122 Type = 1002, /* SQL_DESC_TYPE */
123 TypeName = 14, /* SQL_DESC_TYPE_NAME */
124 Unnamed = 1012, /* SQL_DESC_UNNAMED */
125 Unsigned = 8, /* SQL_DESC_UNSIGNED */
126 Updatable = 10 /* SQL_DESC_UPDATABLE */
129 [StructLayout(LayoutKind.Sequential)]
130 internal struct OdbcTimestamp
133 internal ushort month;
135 internal ushort hour;
136 internal ushort minute;
137 internal ushort second;
138 internal ulong fraction;
142 // sealed internal class libodbc
143 internal class libodbc
145 #region global constants
146 internal const int SQL_OV_ODBC2 = 2;
147 internal const int SQL_OV_ODBC3 = 3;
149 internal const string SQLSTATE_RIGHT_TRUNC = "01004";
150 internal const char C_NULL = '\0';
152 internal const short SQL_TRUE = 1;
153 internal const short SQL_FALSE = 0;
156 internal const short SQL_INDEX_UNIQUE = 0;
157 internal const short SQL_INDEX_ALL = 1;
158 internal const short SQL_QUICK = 0;
159 internal const short SQL_ENSURE = 1;
161 // SQLColumnAttribute
162 internal const short SQL_NO_NULLS = 0;
163 internal const short SQL_NULLABLE = 1;
164 internal const short SQL_NULLABLE_UNKNOWN = 2;
165 internal const short SQL_ATTR_READONLY = 0;
166 internal const short SQL_ATTR_WRITE = 1;
167 internal const short SQL_ATTR_READWRITE_UNKNOWN = 2;
170 internal static OdbcInputOutputDirection ConvertParameterDirection(
171 ParameterDirection dir)
175 case ParameterDirection.Input:
176 return OdbcInputOutputDirection.Input;
177 case ParameterDirection.InputOutput:
178 return OdbcInputOutputDirection.InputOutput;
179 case ParameterDirection.Output:
180 return OdbcInputOutputDirection.Output;
181 case ParameterDirection.ReturnValue:
182 return OdbcInputOutputDirection.ReturnValue;
184 return OdbcInputOutputDirection.Input;
188 [DllImport("odbc32.dll")]
189 internal static extern OdbcReturn SQLAllocHandle (OdbcHandleType HandleType, IntPtr InputHandle, ref IntPtr OutputHandlePtr);
191 [DllImport("odbc32.dll")]
192 internal static extern OdbcReturn SQLSetEnvAttr (IntPtr EnvHandle, OdbcEnv Attribute, IntPtr Value, int StringLength);
194 [DllImport("odbc32.dll")]
195 internal static extern OdbcReturn SQLConnect (IntPtr ConnectionHandle, string ServerName, short NameLength1, string UserName, short NameLength2, string Authentication, short NameLength3);
197 [DllImport("odbc32.dll")]
198 internal static extern OdbcReturn SQLDriverConnect(IntPtr ConnectionHandle, IntPtr WindowHandle, string InConnectionString, short StringLength1, string OutConnectionString, short BufferLength, ref short StringLength2Ptr, ushort DriverCompletion);
200 [DllImport("odbc32.dll")]
201 internal static extern OdbcReturn SQLExecDirect (IntPtr StatementHandle, string StatementText, int TextLength);
203 [DllImport("odbc32.dll")]
204 internal static extern OdbcReturn SQLRowCount (IntPtr StatementHandle, ref int RowCount);
206 [DllImport("odbc32.dll")]
207 internal static extern OdbcReturn SQLNumResultCols (IntPtr StatementHandle, ref short ColumnCount);
209 [DllImport("odbc32.dll")]
210 internal static extern OdbcReturn SQLFetch (IntPtr StatementHandle);
212 [DllImport("odbc32.dll")]
213 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref bool TargetPtr, int BufferLen, ref int Len);
215 [DllImport("odbc32.dll")]
216 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref double TargetPtr, int BufferLen, ref int Len);
218 [DllImport("odbc32.dll")]
219 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref long TargetPtr, int BufferLen, ref int Len);
221 [DllImport("odbc32.dll")]
222 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref short TargetPtr, int BufferLen, ref int Len);
224 [DllImport("odbc32.dll")]
225 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref float TargetPtr, int BufferLen, ref int Len);
227 [DllImport("odbc32.dll")]
228 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref OdbcTimestamp TargetPtr, int BufferLen, ref int Len);
230 [DllImport("odbc32.dll")]
231 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref int TargetPtr, int BufferLen, ref int Len);
233 [DllImport("odbc32.dll")]
234 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, byte[] TargetPtr, int BufferLen, ref int Len);
236 [DllImport("odbc32.dll")]
237 internal static extern OdbcReturn SQLDescribeCol(IntPtr StatementHandle, ushort ColumnNumber, byte[] ColumnName, short BufferLength, ref short NameLength, ref short DataType, ref uint ColumnSize, ref short DecimalDigits, ref short Nullable);
239 [DllImport("odbc32.dll")]
240 internal static extern OdbcReturn SQLFreeHandle(ushort HandleType, IntPtr SqlHandle);
242 [DllImport("odbc32.dll")]
243 internal static extern OdbcReturn SQLDisconnect(IntPtr ConnectionHandle);
245 [DllImport("odbc32.dll")]
246 internal static extern OdbcReturn SQLPrepare(IntPtr StatementHandle, string Statement, int TextLength);
248 [DllImport("odbc32.dll")]
249 internal static extern OdbcReturn SQLExecute(IntPtr StatementHandle);
251 [DllImport("odbc32.dll")]
252 internal static extern OdbcReturn SQLSetConnectAttr(IntPtr ConnectionHandle, OdbcConnectionAttribute Attribute, IntPtr Value, int Length);
254 [DllImport("odbc32.dll")]
255 internal static extern OdbcReturn SQLEndTran(int HandleType, IntPtr Handle, short CompletionType);
257 [DllImport("odbc32.dll")]
258 internal static extern OdbcReturn SQLBindParameter(IntPtr StatementHandle, ushort ParamNum,
259 short InputOutputType, SQL_C_TYPE ValueType, SQL_TYPE ParamType, uint ColSize,
260 short DecimalDigits, IntPtr ParamValue, int BufLen, IntPtr StrLen);
262 [DllImport("odbc32.dll")]
263 internal static extern OdbcReturn SQLCancel(IntPtr StatementHandle);
265 [DllImport("odbc32.dll")]
266 internal static extern OdbcReturn SQLCloseCursor(IntPtr StatementHandle);
268 [DllImport("odbc32.dll")]
269 internal static extern OdbcReturn SQLError(IntPtr EnvironmentHandle,
\r
270 IntPtr ConnectionHandle, IntPtr StatementHandle,
\r
271 byte[] Sqlstate, ref int NativeError,
\r
272 byte[] MessageText, short BufferLength,
\r
273 ref short TextLength);
\r
275 [DllImport("odbc32.dll")]
276 internal static extern OdbcReturn SQLGetStmtAttr(IntPtr StatementHandle,
\r
277 int Attribute, ref IntPtr Value, int BufLen, int StrLen);
\r
279 [DllImport("odbc32.dll")]
280 internal static extern OdbcReturn SQLSetDescField(IntPtr DescriptorHandle,
\r
281 short RecNumber, short FieldIdentifier, byte[] Value, int BufLen);
\r
283 [DllImport("odbc32.dll")]
284 internal static extern OdbcReturn SQLGetDiagRec (OdbcHandleType HandleType,
\r
285 IntPtr Handle, ushort RecordNumber,
\r
286 byte [] Sqlstate, ref int NativeError,
\r
287 byte [] MessageText, short BufferLength,
\r
288 ref short TextLength);
\r
290 [DllImport ("odbc32.dll")]
291 internal static extern OdbcReturn SQLMoreResults (IntPtr Handle);
293 internal enum SQLFreeStmtOptions : short
301 [DllImport ("odbc32.dll")]
302 internal static extern OdbcReturn SQLFreeStmt (IntPtr Handle, SQLFreeStmtOptions option);
304 [DllImport ("odbc32.dll")]
305 internal static extern OdbcReturn SQLGetInfo (IntPtr connHandle,
309 ref short remainingStrLen);
310 [DllImport ("odbc32.dll")]
311 internal static extern OdbcReturn SQLColAttribute (IntPtr StmtHandle,
313 FieldIdentifier fieldId,
314 byte [] charAttributePtr,
316 ref int strLengthPtr,
317 ref int numericAttributePtr
319 [DllImport ("odbc32.dll")]
320 internal static extern OdbcReturn SQLPrimaryKeys (IntPtr StmtHandle,
329 [DllImport ("odbc32.dll")]
330 internal static extern OdbcReturn SQLStatistics (IntPtr StmtHandle,
341 [DllImport ("odbc32.dll")]
342 internal static extern OdbcReturn SQLBindCol (IntPtr StmtHandle,
344 SQL_C_TYPE targetType,
350 [DllImport ("odbc32.dll")]
351 internal static extern OdbcReturn SQLBindCol (IntPtr StmtHandle,
353 SQL_C_TYPE targetType,