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
71 internal enum OdbcInfo : ushort
80 internal enum OdbcInputOutputDirection : short
89 internal enum OdbcLengthIndicator : short
96 internal enum FieldIdentifier
98 AutoUniqueValue = 11, /* SQL_DESC_AUTO_UNIQUE_VALUE */
99 BaseColumnName = 22, /* SQL_DESC_BASE_COLUMN_NAME */
100 BaseTableName = 23, /* SQL_DESC_BASE_TABLE_NAME */
101 CaseSensitive = 12, /* SQL_DESC_CASE_SENSITIVE */
102 CatelogName = 17, /* SQL_DESC_CATALOG_NAME */
103 ConsiseType = 2, /* SQL_DESC_CONCISE_TYPE */
104 Count = 1001, /* SQL_DESC_COUNT */
105 DisplaySize = 6, /* SQL_DESC_DISPLAY_SIZE */
106 FixedPrecScale = 9, /* SQL_DESC_FIXED_PREC_SCALE */
107 Label = 18, /* SQL_DESC_LABEL */
108 Length = 1003, /* SQL_DESC_LENGTH */
109 LiteralPrefix = 27, /* SQL_DESC_LITERAL_PREFIX */
110 LiteralSuffix = 28, /* SQL_DESC_LITERAL_SUFFIX */
111 LocalTypeName = 29, /* SQL_DESC_LOCAL_TYPE_NAME */
112 Name = 1011, /* SQL_DESC_NAME */
113 Nullable = 1008, /* SQL_DESC_NULLABLE */
114 NumPrecRadix = 32, /* SQL_DESC_NUM_PREC_RADIX */
115 OctetLength = 1013, /* SQL_DESC_OCTET_LENGTH */
116 Precision = 1005, /* SQL_DESC_PRECISION */
117 Scale = 1006, /* SQL_DESC_SCALE */
118 SchemaName = 16, /* SQL_DESC_SCHEMA_NAME */
119 Searchable = 13, /* SQL_DESC_SEARCHABLE */
120 TableName = 15, /* SQL_DESC_TABLE_NAME */
121 Type = 1002, /* SQL_DESC_TYPE */
122 TypeName = 14, /* SQL_DESC_TYPE_NAME */
123 Unnamed = 1012, /* SQL_DESC_UNNAMED */
124 Unsigned = 8, /* SQL_DESC_UNSIGNED */
125 Updatable = 10 /* SQL_DESC_UPDATABLE */
128 [StructLayout(LayoutKind.Sequential)]
129 internal struct OdbcTimestamp
132 internal ushort month;
134 internal ushort hour;
135 internal ushort minute;
136 internal ushort second;
137 internal ulong fraction;
141 // sealed internal class libodbc
142 internal class libodbc
144 #region global constants
145 internal const int SQL_OV_ODBC2 = 2;
146 internal const int SQL_OV_ODBC3 = 3;
148 internal const string SQLSTATE_RIGHT_TRUNC = "01004";
149 internal const char C_NULL = '\0';
151 internal const short SQL_TRUE = 1;
152 internal const short SQL_FALSE = 0;
155 internal const short SQL_INDEX_UNIQUE = 0;
156 internal const short SQL_INDEX_ALL = 1;
157 internal const short SQL_QUICK = 0;
158 internal const short SQL_ENSURE = 1;
160 // SQLColumnAttribute
161 internal const short SQL_NO_NULLS = 0;
162 internal const short SQL_NULLABLE = 1;
163 internal const short SQL_NULLABLE_UNKNOWN = 2;
164 internal const short SQL_ATTR_READONLY = 0;
165 internal const short SQL_ATTR_WRITE = 1;
166 internal const short SQL_ATTR_READWRITE_UNKNOWN = 2;
169 internal static OdbcInputOutputDirection ConvertParameterDirection(
170 ParameterDirection dir)
174 case ParameterDirection.Input:
175 return OdbcInputOutputDirection.Input;
176 case ParameterDirection.InputOutput:
177 return OdbcInputOutputDirection.InputOutput;
178 case ParameterDirection.Output:
179 return OdbcInputOutputDirection.Output;
180 case ParameterDirection.ReturnValue:
181 return OdbcInputOutputDirection.ReturnValue;
183 return OdbcInputOutputDirection.Input;
187 [DllImport("odbc32.dll")]
188 internal static extern OdbcReturn SQLAllocHandle (OdbcHandleType HandleType, IntPtr InputHandle, ref IntPtr OutputHandlePtr);
190 [DllImport("odbc32.dll")]
191 internal static extern OdbcReturn SQLSetEnvAttr (IntPtr EnvHandle, OdbcEnv Attribute, IntPtr Value, int StringLength);
193 [DllImport("odbc32.dll")]
194 internal static extern OdbcReturn SQLConnect (IntPtr ConnectionHandle, string ServerName, short NameLength1, string UserName, short NameLength2, string Authentication, short NameLength3);
196 [DllImport("odbc32.dll")]
197 internal static extern OdbcReturn SQLDriverConnect(IntPtr ConnectionHandle, IntPtr WindowHandle, string InConnectionString, short StringLength1, string OutConnectionString, short BufferLength, ref short StringLength2Ptr, ushort DriverCompletion);
199 [DllImport("odbc32.dll")]
200 internal static extern OdbcReturn SQLExecDirect (IntPtr StatementHandle, string StatementText, int TextLength);
202 [DllImport("odbc32.dll")]
203 internal static extern OdbcReturn SQLRowCount (IntPtr StatementHandle, ref int RowCount);
205 [DllImport("odbc32.dll")]
206 internal static extern OdbcReturn SQLNumResultCols (IntPtr StatementHandle, ref short ColumnCount);
208 [DllImport("odbc32.dll")]
209 internal static extern OdbcReturn SQLFetch (IntPtr StatementHandle);
211 [DllImport("odbc32.dll")]
212 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref bool TargetPtr, int BufferLen, ref int Len);
214 [DllImport("odbc32.dll")]
215 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref double TargetPtr, int BufferLen, ref int Len);
217 [DllImport("odbc32.dll")]
218 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref long TargetPtr, int BufferLen, ref int Len);
220 [DllImport("odbc32.dll")]
221 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref short TargetPtr, int BufferLen, ref int Len);
223 [DllImport("odbc32.dll")]
224 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref float TargetPtr, int BufferLen, ref int Len);
226 [DllImport("odbc32.dll")]
227 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref OdbcTimestamp TargetPtr, int BufferLen, ref int Len);
229 [DllImport("odbc32.dll")]
230 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref int TargetPtr, int BufferLen, ref int Len);
232 [DllImport("odbc32.dll")]
233 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, byte[] TargetPtr, int BufferLen, ref int Len);
235 [DllImport("odbc32.dll")]
236 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);
238 [DllImport("odbc32.dll")]
239 internal static extern OdbcReturn SQLFreeHandle(ushort HandleType, IntPtr SqlHandle);
241 [DllImport("odbc32.dll")]
242 internal static extern OdbcReturn SQLDisconnect(IntPtr ConnectionHandle);
244 [DllImport("odbc32.dll")]
245 internal static extern OdbcReturn SQLPrepare(IntPtr StatementHandle, string Statement, int TextLength);
247 [DllImport("odbc32.dll")]
248 internal static extern OdbcReturn SQLExecute(IntPtr StatementHandle);
250 [DllImport("odbc32.dll")]
251 internal static extern OdbcReturn SQLSetConnectAttr(IntPtr ConnectionHandle, OdbcConnectionAttribute Attribute, IntPtr Value, int Length);
253 [DllImport("odbc32.dll")]
254 internal static extern OdbcReturn SQLEndTran(int HandleType, IntPtr Handle, short CompletionType);
256 [DllImport("odbc32.dll")]
257 internal static extern OdbcReturn SQLBindParameter(IntPtr StatementHandle, ushort ParamNum,
258 short InputOutputType, SQL_C_TYPE ValueType, SQL_TYPE ParamType, uint ColSize,
259 short DecimalDigits, IntPtr ParamValue, int BufLen, IntPtr StrLen);
261 [DllImport("odbc32.dll")]
262 internal static extern OdbcReturn SQLCancel(IntPtr StatementHandle);
264 [DllImport("odbc32.dll")]
265 internal static extern OdbcReturn SQLCloseCursor(IntPtr StatementHandle);
267 [DllImport("odbc32.dll")]
268 internal static extern OdbcReturn SQLError(IntPtr EnvironmentHandle,
\r
269 IntPtr ConnectionHandle, IntPtr StatementHandle,
\r
270 byte[] Sqlstate, ref int NativeError,
\r
271 byte[] MessageText, short BufferLength,
\r
272 ref short TextLength);
\r
274 [DllImport("odbc32.dll")]
275 internal static extern OdbcReturn SQLGetStmtAttr(IntPtr StatementHandle,
\r
276 int Attribute, ref IntPtr Value, int BufLen, int StrLen);
\r
278 [DllImport("odbc32.dll")]
279 internal static extern OdbcReturn SQLSetDescField(IntPtr DescriptorHandle,
\r
280 short RecNumber, short FieldIdentifier, byte[] Value, int BufLen);
\r
282 [DllImport("odbc32.dll")]
283 internal static extern OdbcReturn SQLGetDiagRec (OdbcHandleType HandleType,
\r
284 IntPtr Handle, ushort RecordNumber,
\r
285 byte [] Sqlstate, ref int NativeError,
\r
286 byte [] MessageText, short BufferLength,
\r
287 ref short TextLength);
\r
289 [DllImport ("odbc32.dll")]
290 internal static extern OdbcReturn SQLMoreResults (IntPtr Handle);
292 internal enum SQLFreeStmtOptions : short
300 [DllImport ("odbc32.dll")]
301 internal static extern OdbcReturn SQLFreeStmt (IntPtr Handle, SQLFreeStmtOptions option);
303 [DllImport ("odbc32.dll")]
304 internal static extern OdbcReturn SQLGetInfo (IntPtr connHandle,
308 ref short remainingStrLen);
309 [DllImport ("odbc32.dll")]
310 internal static extern OdbcReturn SQLColAttribute (IntPtr StmtHandle,
312 FieldIdentifier fieldId,
313 byte [] charAttributePtr,
315 ref int strLengthPtr,
316 ref int numericAttributePtr
318 [DllImport ("odbc32.dll")]
319 internal static extern OdbcReturn SQLPrimaryKeys (IntPtr StmtHandle,
328 [DllImport ("odbc32.dll")]
329 internal static extern OdbcReturn SQLStatistics (IntPtr StmtHandle,
340 [DllImport ("odbc32.dll")]
341 internal static extern OdbcReturn SQLBindCol (IntPtr StmtHandle,
343 SQL_C_TYPE targetType,
349 [DllImport ("odbc32.dll")]
350 internal static extern OdbcReturn SQLBindCol (IntPtr StmtHandle,
352 SQL_C_TYPE targetType,