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); }
internal static extern ODBCResult SQLGetDiagRecW( ODBCHType handleType, ODBCHBase handle, short recordNumber, StringBuilder stateBuffer, out int nativeError, StringBuilder messageBuffer, short bufferLength, out short bufferLengthNeeded);
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())); }