2 // System.Data.Odbc.libodbc
5 // Brian Ritchie (brianlritchie@hotmail.com)
6 // Sureshkumar T (tsureshkumar@novell.com)
8 // Copyright (C) Brian Ritchie, 2002
10 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Data.Common;
34 using System.Runtime.InteropServices;
36 namespace System.Data.Odbc
38 internal enum OdbcHandleType : short
46 internal enum OdbcReturn : short
57 internal enum OdbcEnv : ushort
60 ConnectionPooling = 201,
64 internal enum OdbcConnectionAttribute : int
67 TransactionIsolation = 108,
69 CoptTransactionIsolation = 1227 /* SQL_COPT_SS_TXN_ISOLATION */
72 internal enum OdbcInfo : ushort
79 IdentifierQuoteChar = 29
82 internal enum OdbcInputOutputDirection : short
91 internal enum OdbcIsolationLevel
97 Snapshot = 32 /* SQL_TXN_SS_SNAPSHOT */
100 internal enum OdbcLengthIndicator : short
107 internal enum FieldIdentifier : short
109 AutoUniqueValue = 11, /* SQL_DESC_AUTO_UNIQUE_VALUE */
110 BaseColumnName = 22, /* SQL_DESC_BASE_COLUMN_NAME */
111 BaseTableName = 23, /* SQL_DESC_BASE_TABLE_NAME */
112 CaseSensitive = 12, /* SQL_DESC_CASE_SENSITIVE */
113 CatelogName = 17, /* SQL_DESC_CATALOG_NAME */
114 ConsiseType = 2, /* SQL_DESC_CONCISE_TYPE */
115 Count = 1001, /* SQL_DESC_COUNT */
116 DisplaySize = 6, /* SQL_DESC_DISPLAY_SIZE */
117 FixedPrecScale = 9, /* SQL_DESC_FIXED_PREC_SCALE */
118 Label = 18, /* SQL_DESC_LABEL */
119 Length = 1003, /* SQL_DESC_LENGTH */
120 LiteralPrefix = 27, /* SQL_DESC_LITERAL_PREFIX */
121 LiteralSuffix = 28, /* SQL_DESC_LITERAL_SUFFIX */
122 LocalTypeName = 29, /* SQL_DESC_LOCAL_TYPE_NAME */
123 Name = 1011, /* SQL_DESC_NAME */
124 Nullable = 1008, /* SQL_DESC_NULLABLE */
125 NumPrecRadix = 32, /* SQL_DESC_NUM_PREC_RADIX */
126 OctetLength = 1013, /* SQL_DESC_OCTET_LENGTH */
127 Precision = 1005, /* SQL_DESC_PRECISION */
128 Scale = 1006, /* SQL_DESC_SCALE */
129 SchemaName = 16, /* SQL_DESC_SCHEMA_NAME */
130 Searchable = 13, /* SQL_DESC_SEARCHABLE */
131 TableName = 15, /* SQL_DESC_TABLE_NAME */
132 Type = 1002, /* SQL_DESC_TYPE */
133 TypeName = 14, /* SQL_DESC_TYPE_NAME */
134 Unnamed = 1012, /* SQL_DESC_UNNAMED */
135 Unsigned = 8, /* SQL_DESC_UNSIGNED */
136 Updatable = 10 /* SQL_DESC_UPDATABLE */
139 [StructLayout(LayoutKind.Sequential)]
140 internal struct OdbcTimestamp
143 internal ushort month;
145 internal ushort hour;
146 internal ushort minute;
147 internal ushort second;
148 internal ulong fraction;
151 internal class libodbc
153 #region global constants
154 internal const int SQL_OV_ODBC2 = 2;
155 internal const int SQL_OV_ODBC3 = 3;
157 internal const string SQLSTATE_RIGHT_TRUNC = "01004";
158 internal const char C_NULL = '\0';
159 internal const int SQL_NTS = -3;
161 internal const short SQL_TRUE = 1;
162 internal const short SQL_FALSE = 0;
165 internal const short SQL_INDEX_UNIQUE = 0;
166 internal const short SQL_INDEX_ALL = 1;
167 internal const short SQL_QUICK = 0;
168 internal const short SQL_ENSURE = 1;
170 // SQLColumnAttribute
171 internal const short SQL_NO_NULLS = 0;
172 internal const short SQL_NULLABLE = 1;
173 internal const short SQL_NULLABLE_UNKNOWN = 2;
174 internal const short SQL_ATTR_READONLY = 0;
175 internal const short SQL_ATTR_WRITE = 1;
176 internal const short SQL_ATTR_READWRITE_UNKNOWN = 2;
179 internal static OdbcInputOutputDirection ConvertParameterDirection(
180 ParameterDirection dir)
183 case ParameterDirection.Input:
184 return OdbcInputOutputDirection.Input;
185 case ParameterDirection.InputOutput:
186 return OdbcInputOutputDirection.InputOutput;
187 case ParameterDirection.Output:
188 return OdbcInputOutputDirection.Output;
189 case ParameterDirection.ReturnValue:
190 return OdbcInputOutputDirection.ReturnValue;
192 return OdbcInputOutputDirection.Input;
196 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
197 internal static extern OdbcReturn SQLAllocHandle (
198 OdbcHandleType HandleType,
200 ref IntPtr OutputHandlePtr);
202 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
203 internal static extern OdbcReturn SQLSetEnvAttr (
209 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
210 internal static extern OdbcReturn SQLConnect (
211 IntPtr ConnectionHandle,
216 string Authentication,
219 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
220 internal static extern OdbcReturn SQLDriverConnect (
221 IntPtr ConnectionHandle,
223 string InConnectionString,
225 string OutConnectionString,
227 ref short StringLength2Ptr,
228 ushort DriverCompletion);
230 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
231 internal static extern OdbcReturn SQLExecDirect (
232 IntPtr StatementHandle,
233 string StatementText,
236 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
237 internal static extern OdbcReturn SQLRowCount (
238 IntPtr StatementHandle,
241 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
242 internal static extern OdbcReturn SQLNumResultCols (
243 IntPtr StatementHandle,
244 ref short ColumnCount);
246 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
247 internal static extern OdbcReturn SQLFetch (
248 IntPtr StatementHandle);
250 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
251 internal static extern OdbcReturn SQLGetData (
252 IntPtr StatementHandle,
254 SQL_C_TYPE TargetType,
259 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
260 internal static extern OdbcReturn SQLGetData (
261 IntPtr StatementHandle,
263 SQL_C_TYPE TargetType,
264 ref double TargetPtr,
268 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
269 internal static extern OdbcReturn SQLGetData (
270 IntPtr StatementHandle,
272 SQL_C_TYPE TargetType,
277 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
278 internal static extern OdbcReturn SQLGetData (
279 IntPtr StatementHandle,
281 SQL_C_TYPE TargetType,
286 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
287 internal static extern OdbcReturn SQLGetData (
288 IntPtr StatementHandle,
290 SQL_C_TYPE TargetType,
295 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
296 internal static extern OdbcReturn SQLGetData (
297 IntPtr StatementHandle,
299 SQL_C_TYPE TargetType,
300 ref OdbcTimestamp TargetPtr,
304 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
305 internal static extern OdbcReturn SQLGetData (
306 IntPtr StatementHandle,
308 SQL_C_TYPE TargetType,
313 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
314 internal static extern OdbcReturn SQLGetData (
315 IntPtr StatementHandle,
317 SQL_C_TYPE TargetType,
322 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
323 internal static extern OdbcReturn SQLDescribeCol (
324 IntPtr StatementHandle,
328 ref short NameLength,
331 ref short DecimalDigits,
334 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
335 internal static extern OdbcReturn SQLFreeHandle (
339 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
340 internal static extern OdbcReturn SQLDisconnect (
341 IntPtr ConnectionHandle);
343 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
344 internal static extern OdbcReturn SQLPrepare (
345 IntPtr StatementHandle,
349 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
350 internal static extern OdbcReturn SQLExecute (
351 IntPtr StatementHandle);
353 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
354 internal static extern OdbcReturn SQLGetConnectAttr (
355 IntPtr ConnectionHandle,
356 OdbcConnectionAttribute Attribute,
359 out int StringLength);
361 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
362 internal static extern OdbcReturn SQLSetConnectAttr (
363 IntPtr ConnectionHandle,
364 OdbcConnectionAttribute Attribute,
368 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
369 internal static extern OdbcReturn SQLEndTran (
372 short CompletionType);
374 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
375 internal static extern OdbcReturn SQLBindParameter (
376 IntPtr StatementHandle,
378 short InputOutputType,
379 SQL_C_TYPE ValueType,
387 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
388 internal static extern OdbcReturn SQLCancel (
389 IntPtr StatementHandle);
391 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
392 internal static extern OdbcReturn SQLCloseCursor (
393 IntPtr StatementHandle);
395 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
396 internal static extern OdbcReturn SQLError (
397 IntPtr EnvironmentHandle,
398 IntPtr ConnectionHandle,
399 IntPtr StatementHandle,
404 ref short TextLength);
406 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
407 internal static extern OdbcReturn SQLGetStmtAttr (
408 IntPtr StatementHandle,
414 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
415 internal static extern OdbcReturn SQLSetDescField (
416 IntPtr DescriptorHandle,
418 short FieldIdentifier,
422 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
423 internal static extern OdbcReturn SQLGetDiagRec (
424 OdbcHandleType HandleType,
431 ref short TextLength);
433 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
434 internal static extern OdbcReturn SQLMoreResults (
437 internal enum SQLFreeStmtOptions : short
445 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
446 internal static extern OdbcReturn SQLFreeStmt (
448 SQLFreeStmtOptions option);
450 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
451 internal static extern OdbcReturn SQLGetInfo (
456 ref short remainingStrLen);
458 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
459 internal static extern OdbcReturn SQLColAttribute (
462 FieldIdentifier fieldId,
463 byte [] charAttributePtr,
465 ref short strLengthPtr,
466 ref int numericAttributePtr);
468 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
469 internal static extern OdbcReturn SQLPrimaryKeys (
478 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
479 internal static extern OdbcReturn SQLStatistics (
490 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
491 internal static extern OdbcReturn SQLBindCol (
494 SQL_C_TYPE targetType,
499 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
500 internal static extern OdbcReturn SQLBindCol (
503 SQL_C_TYPE targetType,