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 static int SQL_OV_ODBC2 = 2;
146 internal static int SQL_OV_ODBC3 = 3;
148 internal static string SQLSTATE_RIGHT_TRUNC = "01004";
149 internal static char C_NULL = '\0';
152 internal static OdbcInputOutputDirection ConvertParameterDirection(
153 ParameterDirection dir)
157 case ParameterDirection.Input:
158 return OdbcInputOutputDirection.Input;
159 case ParameterDirection.InputOutput:
160 return OdbcInputOutputDirection.InputOutput;
161 case ParameterDirection.Output:
162 return OdbcInputOutputDirection.Output;
163 case ParameterDirection.ReturnValue:
164 return OdbcInputOutputDirection.ReturnValue;
166 return OdbcInputOutputDirection.Input;
170 [DllImport("odbc32.dll")]
171 internal static extern OdbcReturn SQLAllocHandle (OdbcHandleType HandleType, IntPtr InputHandle, ref IntPtr OutputHandlePtr);
173 [DllImport("odbc32.dll")]
174 internal static extern OdbcReturn SQLSetEnvAttr (IntPtr EnvHandle, OdbcEnv Attribute, IntPtr Value, int StringLength);
176 [DllImport("odbc32.dll")]
177 internal static extern OdbcReturn SQLConnect (IntPtr ConnectionHandle, string ServerName, short NameLength1, string UserName, short NameLength2, string Authentication, short NameLength3);
179 [DllImport("odbc32.dll")]
180 internal static extern OdbcReturn SQLDriverConnect(IntPtr ConnectionHandle, IntPtr WindowHandle, string InConnectionString, short StringLength1, string OutConnectionString, short BufferLength, ref short StringLength2Ptr, ushort DriverCompletion);
182 [DllImport("odbc32.dll")]
183 internal static extern OdbcReturn SQLExecDirect (IntPtr StatementHandle, string StatementText, int TextLength);
185 [DllImport("odbc32.dll")]
186 internal static extern OdbcReturn SQLRowCount (IntPtr StatementHandle, ref int RowCount);
188 [DllImport("odbc32.dll")]
189 internal static extern OdbcReturn SQLNumResultCols (IntPtr StatementHandle, ref short ColumnCount);
191 [DllImport("odbc32.dll")]
192 internal static extern OdbcReturn SQLFetch (IntPtr StatementHandle);
194 [DllImport("odbc32.dll")]
195 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref bool TargetPtr, int BufferLen, ref int Len);
197 [DllImport("odbc32.dll")]
198 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref double TargetPtr, int BufferLen, ref int Len);
200 [DllImport("odbc32.dll")]
201 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref long TargetPtr, int BufferLen, ref int Len);
203 [DllImport("odbc32.dll")]
204 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref short TargetPtr, int BufferLen, ref int Len);
206 [DllImport("odbc32.dll")]
207 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref float TargetPtr, int BufferLen, ref int Len);
209 [DllImport("odbc32.dll")]
210 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref OdbcTimestamp TargetPtr, int BufferLen, ref int Len);
212 [DllImport("odbc32.dll")]
213 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, ref int TargetPtr, int BufferLen, ref int Len);
215 [DllImport("odbc32.dll")]
216 internal static extern OdbcReturn SQLGetData (IntPtr StatementHandle, ushort ColumnNumber, SQL_C_TYPE TargetType, byte[] TargetPtr, int BufferLen, ref int Len);
218 [DllImport("odbc32.dll")]
219 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);
221 [DllImport("odbc32.dll")]
222 internal static extern OdbcReturn SQLFreeHandle(ushort HandleType, IntPtr SqlHandle);
224 [DllImport("odbc32.dll")]
225 internal static extern OdbcReturn SQLDisconnect(IntPtr ConnectionHandle);
227 [DllImport("odbc32.dll")]
228 internal static extern OdbcReturn SQLPrepare(IntPtr StatementHandle, string Statement, int TextLength);
230 [DllImport("odbc32.dll")]
231 internal static extern OdbcReturn SQLExecute(IntPtr StatementHandle);
233 [DllImport("odbc32.dll")]
234 internal static extern OdbcReturn SQLSetConnectAttr(IntPtr ConnectionHandle, OdbcConnectionAttribute Attribute, IntPtr Value, int Length);
236 [DllImport("odbc32.dll")]
237 internal static extern OdbcReturn SQLEndTran(int HandleType, IntPtr Handle, short CompletionType);
239 [DllImport("odbc32.dll")]
240 internal static extern OdbcReturn SQLBindParameter(IntPtr StatementHandle, ushort ParamNum,
241 short InputOutputType, SQL_C_TYPE ValueType, SQL_TYPE ParamType, uint ColSize,
242 short DecimalDigits, byte[] ParamValue, int BufLen, ref int StrLen);
244 [DllImport("odbc32.dll")]
245 internal static extern OdbcReturn SQLBindParameter(IntPtr StatementHandle, ushort ParamNum,
246 short InputOutputType, SQL_C_TYPE ValueType, SQL_TYPE ParamType, uint ColSize,
247 short DecimalDigits, ref int ParamValue, int BufLen, ref int StrLen);
249 [DllImport("odbc32.dll")]
250 internal static extern OdbcReturn SQLCancel(IntPtr StatementHandle);
252 [DllImport("odbc32.dll")]
253 internal static extern OdbcReturn SQLCloseCursor(IntPtr StatementHandle);
255 [DllImport("odbc32.dll")]
256 internal static extern OdbcReturn SQLError(IntPtr EnvironmentHandle,
\r
257 IntPtr ConnectionHandle, IntPtr StatementHandle,
\r
258 byte[] Sqlstate, ref int NativeError,
\r
259 byte[] MessageText, short BufferLength,
\r
260 ref short TextLength);
\r
262 [DllImport("odbc32.dll")]
263 internal static extern OdbcReturn SQLGetStmtAttr(IntPtr StatementHandle,
\r
264 int Attribute, ref IntPtr Value, int BufLen, int StrLen);
\r
266 [DllImport("odbc32.dll")]
267 internal static extern OdbcReturn SQLSetDescField(IntPtr DescriptorHandle,
\r
268 short RecNumber, short FieldIdentifier, byte[] Value, int BufLen);
\r
270 [DllImport("odbc32.dll")]
271 internal static extern OdbcReturn SQLGetDiagRec (OdbcHandleType HandleType,
\r
272 IntPtr Handle, ushort RecordNumber,
\r
273 byte [] Sqlstate, ref int NativeError,
\r
274 byte [] MessageText, short BufferLength,
\r
275 ref short TextLength);
\r
277 [DllImport ("odbc32.dll")]
278 internal static extern OdbcReturn SQLMoreResults (IntPtr Handle);
280 internal enum SQLFreeStmtOptions : short
288 [DllImport ("odbc32.dll")]
289 internal static extern OdbcReturn SQLFreeStmt (IntPtr Handle, SQLFreeStmtOptions option);
291 [DllImport ("odbc32.dll")]
292 internal static extern OdbcReturn SQLGetInfo (IntPtr connHandle,
296 ref short remainingStrLen);
297 [DllImport ("odbc32.dll")]
298 internal static extern OdbcReturn SQLColAttribute (IntPtr StmtHandle,
300 FieldIdentifier fieldId,
301 byte [] charAttributePtr,
303 ref int strLengthPtr,
304 ref int numericAttributePtr
306 [DllImport ("odbc32.dll")]
307 internal static extern OdbcReturn SQLPrimaryKeys (IntPtr StmtHandle,
316 [DllImport ("odbc32.dll")]
317 internal static extern OdbcReturn SQLBindCol (IntPtr StmtHandle,
319 SQL_C_TYPE targetType,