Exemple #1
0
        private static List <ODBCErrorInfo> GetErrorInfo(ODBCHBase handle)
        {
            var   eList         = new List <ODBCErrorInfo>();
            short start         = 1;
            var   messageBuffer = new StringBuilder(256);
            var   stateBuffer   = new StringBuilder(5);
            int   nativeError;
            short bufferLengthNeeded;
            var   resultString = new StringBuilder();

            while (true)
            {
                var result = ODBCNativeMethods.SQLGetDiagRecW(handle.HandleType, handle, start, stateBuffer, out nativeError, messageBuffer, (short)messageBuffer.Capacity, out bufferLengthNeeded);
                if (result == ODBCResult.SuccessWithInfo)
                {
                    bufferLengthNeeded = (short)((int)bufferLengthNeeded + 1);
                    if (messageBuffer.Capacity < bufferLengthNeeded)
                    {
                        messageBuffer.Capacity = bufferLengthNeeded;
                        result = ODBCNativeMethods.SQLGetDiagRecW(handle.HandleType, handle, start, stateBuffer, out nativeError, messageBuffer, (short)messageBuffer.Capacity, out bufferLengthNeeded);
                    }
                }
                if ((result != ODBCResult.Success) && (result != ODBCResult.SuccessWithInfo))
                {
                    break;
                }
                eList.Add(new ODBCErrorInfo(stateBuffer.ToString(), nativeError.ToString(), messageBuffer.ToString()));
                start++;
            }
            return(eList);
        }
Exemple #2
0
 internal static extern ODBCResult SQLGetDiagRecW(
     ODBCHType handleType,
     ODBCHBase handle,
     short recordNumber,
     StringBuilder stateBuffer,
     out int nativeError,
     StringBuilder messageBuffer,
     short bufferLength,
     out short bufferLengthNeeded);
Exemple #3
0
        internal static ODBCAPIError GetException(ODBCHBase handle, string additionalMessage)
        {
            var eList        = GetErrorInfo(handle);
            var resultString = new StringBuilder();

            resultString.Append(additionalMessage);
            foreach (var eMes in eList)
            {
                resultString.Append(Environment.NewLine);
                resultString.Append(string.Format("[{0}] [{1}] {2}", eMes.ECode, eMes.ENativeCode, eMes.EMessage));
            }

            return(new ODBCAPIError(resultString.ToString()));
        }