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,
70 CoptTransactionIsolation = 1227 /* SQL_COPT_SS_TXN_ISOLATION */
74 internal enum OdbcInfo : ushort
81 IdentifierQuoteChar = 29
84 internal enum OdbcInputOutputDirection : short
93 internal enum OdbcIsolationLevel
99 Snapshot = 32 /* SQL_TXN_SS_SNAPSHOT */
102 internal enum OdbcLengthIndicator : short
109 internal enum FieldIdentifier : short
111 AutoUniqueValue = 11, /* SQL_DESC_AUTO_UNIQUE_VALUE */
112 BaseColumnName = 22, /* SQL_DESC_BASE_COLUMN_NAME */
113 BaseTableName = 23, /* SQL_DESC_BASE_TABLE_NAME */
114 CaseSensitive = 12, /* SQL_DESC_CASE_SENSITIVE */
115 CatelogName = 17, /* SQL_DESC_CATALOG_NAME */
116 ConsiseType = 2, /* SQL_DESC_CONCISE_TYPE */
117 Count = 1001, /* SQL_DESC_COUNT */
118 DisplaySize = 6, /* SQL_DESC_DISPLAY_SIZE */
119 FixedPrecScale = 9, /* SQL_DESC_FIXED_PREC_SCALE */
120 Label = 18, /* SQL_DESC_LABEL */
121 Length = 1003, /* SQL_DESC_LENGTH */
122 LiteralPrefix = 27, /* SQL_DESC_LITERAL_PREFIX */
123 LiteralSuffix = 28, /* SQL_DESC_LITERAL_SUFFIX */
124 LocalTypeName = 29, /* SQL_DESC_LOCAL_TYPE_NAME */
125 Name = 1011, /* SQL_DESC_NAME */
126 Nullable = 1008, /* SQL_DESC_NULLABLE */
127 NumPrecRadix = 32, /* SQL_DESC_NUM_PREC_RADIX */
128 OctetLength = 1013, /* SQL_DESC_OCTET_LENGTH */
129 Precision = 1005, /* SQL_DESC_PRECISION */
130 Scale = 1006, /* SQL_DESC_SCALE */
131 SchemaName = 16, /* SQL_DESC_SCHEMA_NAME */
132 Searchable = 13, /* SQL_DESC_SEARCHABLE */
133 TableName = 15, /* SQL_DESC_TABLE_NAME */
134 Type = 1002, /* SQL_DESC_TYPE */
135 TypeName = 14, /* SQL_DESC_TYPE_NAME */
136 Unnamed = 1012, /* SQL_DESC_UNNAMED */
137 Unsigned = 8, /* SQL_DESC_UNSIGNED */
138 Updatable = 10 /* SQL_DESC_UPDATABLE */
141 [StructLayout(LayoutKind.Sequential)]
142 internal struct OdbcTimestamp
145 internal ushort month;
147 internal ushort hour;
148 internal ushort minute;
149 internal ushort second;
150 internal ulong fraction;
153 internal class libodbc
155 #region global constants
156 internal const int SQL_OV_ODBC2 = 2;
157 internal const int SQL_OV_ODBC3 = 3;
159 internal const string SQLSTATE_RIGHT_TRUNC = "01004";
160 internal const char C_NULL = '\0';
161 internal const int SQL_NTS = -3;
163 internal const short SQL_TRUE = 1;
164 internal const short SQL_FALSE = 0;
167 internal const short SQL_INDEX_UNIQUE = 0;
168 internal const short SQL_INDEX_ALL = 1;
169 internal const short SQL_QUICK = 0;
170 internal const short SQL_ENSURE = 1;
172 // SQLColumnAttribute
173 internal const short SQL_NO_NULLS = 0;
174 internal const short SQL_NULLABLE = 1;
175 internal const short SQL_NULLABLE_UNKNOWN = 2;
176 internal const short SQL_ATTR_READONLY = 0;
177 internal const short SQL_ATTR_WRITE = 1;
178 internal const short SQL_ATTR_READWRITE_UNKNOWN = 2;
181 internal static OdbcInputOutputDirection ConvertParameterDirection(
182 ParameterDirection dir)
185 case ParameterDirection.Input:
186 return OdbcInputOutputDirection.Input;
187 case ParameterDirection.InputOutput:
188 return OdbcInputOutputDirection.InputOutput;
189 case ParameterDirection.Output:
190 return OdbcInputOutputDirection.Output;
191 case ParameterDirection.ReturnValue:
192 return OdbcInputOutputDirection.ReturnValue;
194 return OdbcInputOutputDirection.Input;
198 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
199 internal static extern OdbcReturn SQLAllocHandle (
200 OdbcHandleType HandleType,
202 ref IntPtr OutputHandlePtr);
204 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
205 internal static extern OdbcReturn SQLSetEnvAttr (
211 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
212 internal static extern OdbcReturn SQLConnect (
213 IntPtr ConnectionHandle,
218 string Authentication,
221 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
222 internal static extern OdbcReturn SQLDriverConnect (
223 IntPtr ConnectionHandle,
225 string InConnectionString,
227 string OutConnectionString,
229 ref short StringLength2Ptr,
230 ushort DriverCompletion);
232 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
233 internal static extern OdbcReturn SQLExecDirect (
234 IntPtr StatementHandle,
235 string StatementText,
238 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
239 internal static extern OdbcReturn SQLRowCount (
240 IntPtr StatementHandle,
243 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
244 internal static extern OdbcReturn SQLNumResultCols (
245 IntPtr StatementHandle,
246 ref short ColumnCount);
248 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
249 internal static extern OdbcReturn SQLFetch (
250 IntPtr StatementHandle);
252 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
253 internal static extern OdbcReturn SQLGetData (
254 IntPtr StatementHandle,
256 SQL_C_TYPE TargetType,
261 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
262 internal static extern OdbcReturn SQLGetData (
263 IntPtr StatementHandle,
265 SQL_C_TYPE TargetType,
266 ref double TargetPtr,
270 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
271 internal static extern OdbcReturn SQLGetData (
272 IntPtr StatementHandle,
274 SQL_C_TYPE TargetType,
279 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
280 internal static extern OdbcReturn SQLGetData (
281 IntPtr StatementHandle,
283 SQL_C_TYPE TargetType,
288 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
289 internal static extern OdbcReturn SQLGetData (
290 IntPtr StatementHandle,
292 SQL_C_TYPE TargetType,
297 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
298 internal static extern OdbcReturn SQLGetData (
299 IntPtr StatementHandle,
301 SQL_C_TYPE TargetType,
302 ref OdbcTimestamp TargetPtr,
306 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
307 internal static extern OdbcReturn SQLGetData (
308 IntPtr StatementHandle,
310 SQL_C_TYPE TargetType,
315 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
316 internal static extern OdbcReturn SQLGetData (
317 IntPtr StatementHandle,
319 SQL_C_TYPE TargetType,
324 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
325 internal static extern OdbcReturn SQLDescribeCol (
326 IntPtr StatementHandle,
330 ref short NameLength,
333 ref short DecimalDigits,
336 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
337 internal static extern OdbcReturn SQLFreeHandle (
341 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
342 internal static extern OdbcReturn SQLDisconnect (
343 IntPtr ConnectionHandle);
345 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
346 internal static extern OdbcReturn SQLPrepare (
347 IntPtr StatementHandle,
351 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
352 internal static extern OdbcReturn SQLExecute (
353 IntPtr StatementHandle);
355 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
356 internal static extern OdbcReturn SQLGetConnectAttr (
357 IntPtr ConnectionHandle,
358 OdbcConnectionAttribute Attribute,
361 out int StringLength);
363 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
364 internal static extern OdbcReturn SQLSetConnectAttr (
365 IntPtr ConnectionHandle,
366 OdbcConnectionAttribute Attribute,
370 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
371 internal static extern OdbcReturn SQLEndTran (
374 short CompletionType);
376 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
377 internal static extern OdbcReturn SQLBindParameter (
378 IntPtr StatementHandle,
380 short InputOutputType,
381 SQL_C_TYPE ValueType,
389 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
390 internal static extern OdbcReturn SQLCancel (
391 IntPtr StatementHandle);
393 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
394 internal static extern OdbcReturn SQLCloseCursor (
395 IntPtr StatementHandle);
397 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
398 internal static extern OdbcReturn SQLError (
399 IntPtr EnvironmentHandle,
400 IntPtr ConnectionHandle,
401 IntPtr StatementHandle,
406 ref short TextLength);
408 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
409 internal static extern OdbcReturn SQLGetStmtAttr (
410 IntPtr StatementHandle,
416 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
417 internal static extern OdbcReturn SQLSetDescField (
418 IntPtr DescriptorHandle,
420 short FieldIdentifier,
424 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
425 internal static extern OdbcReturn SQLGetDiagRec (
426 OdbcHandleType HandleType,
433 ref short TextLength);
435 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
436 internal static extern OdbcReturn SQLMoreResults (
439 internal enum SQLFreeStmtOptions : short
447 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
448 internal static extern OdbcReturn SQLFreeStmt (
450 SQLFreeStmtOptions option);
452 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
453 internal static extern OdbcReturn SQLGetInfo (
458 ref short remainingStrLen);
460 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
461 internal static extern OdbcReturn SQLColAttribute (
464 FieldIdentifier fieldId,
465 byte [] charAttributePtr,
467 ref short strLengthPtr,
468 ref int numericAttributePtr);
470 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
471 internal static extern OdbcReturn SQLPrimaryKeys (
480 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
481 internal static extern OdbcReturn SQLStatistics (
492 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
493 internal static extern OdbcReturn SQLBindCol (
496 SQL_C_TYPE targetType,
501 [DllImport ("odbc32.dll", CharSet = CharSet.Unicode)]
502 internal static extern OdbcReturn SQLBindCol (
505 SQL_C_TYPE targetType,