// // System.Data.Odbc.OdbcError // // Author: // Brian Ritchie (brianlritchie@hotmail.com) // // Copyright (C) Brian Ritchie, 2002 // // // Copyright (C) 2004 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // using System.Collections; using System.ComponentModel; using System.Data; using System.Data.Common; namespace System.Data.Odbc { [Serializable] public sealed class OdbcError { string _message; string _source; string _state; int _nativeerror; #region Constructors internal OdbcError(string Source) { _nativeerror = 1; _source = Source; _message = "Error in " + _source; _state = ""; } internal OdbcError(string Source, OdbcHandleType HandleType, IntPtr Handle) { short buflen=256,txtlen=0; OdbcReturn ret=OdbcReturn.Success; byte[] buf_MsgText=new byte[buflen]; byte[] buf_SqlState=new byte[buflen]; bool NeedsDecode=true; _source = Source; switch (HandleType) { case OdbcHandleType.Dbc: ret=libodbc.SQLError(IntPtr.Zero,Handle,IntPtr.Zero, buf_SqlState, ref _nativeerror, buf_MsgText, buflen, ref txtlen); break; case OdbcHandleType.Stmt: ret=libodbc.SQLError(IntPtr.Zero,IntPtr.Zero,Handle, buf_SqlState, ref _nativeerror, buf_MsgText, buflen, ref txtlen); break; case OdbcHandleType.Env: ret=libodbc.SQLError(Handle,IntPtr.Zero,IntPtr.Zero, buf_SqlState, ref _nativeerror, buf_MsgText, buflen, ref txtlen); break; default: _nativeerror = 1; _source = Source; _message = "Error in " + _source; _state = ""; NeedsDecode=false; break; } if (NeedsDecode) { if (ret!=OdbcReturn.Success) { _nativeerror = 1; _source = Source; _message = "Unable to retreive error information from ODBC driver manager"; _state = ""; } else { _state = System.Text.Encoding.Default.GetString (buf_SqlState).Replace ((char) 0, ' ').Trim (); _message = System.Text.Encoding.Default.GetString (buf_MsgText).Replace ((char) 0, ' ').Trim (); } } } #endregion // Constructors #region Properties public string Message { get { return _message; } } public int NativeError { get { return _nativeerror; } } public string Source { get { return _source; } } public string SQLState { get { return _state; } } #endregion // Properties #region methods public override string ToString () { return Message; } #endregion } }