[DllImport("odbccp32", CharSet=CharSet.Auto)]
public static extern SQL_RETURN_CODE SQLInstallerError(int iError, ref int pfErrorCode, StringBuilder lpszErrorMsg, int cbErrorMsgMax, ref int pcbErrorMsg);
<DllImport("ODBCCP32.dll", CallingConvention:=CallingConvention.Winapi, CharSet:=CharSet.Auto, SetLastError:=True)> _
Public Shared Function SQLInstallerError(ByVal iError As Integer, ByRef pfErrorCode As Integer, ByVal lpszErrorMsg As StringBuilder, ByVal cbErrorMsgMax As Integer, ByRef pcbErrorMsg As Integer) As SQL_RETURN_CODE
End Function
public enum SQL_RETURN_CODE : short
{
SQL_ERROR = -1,
SQL_INVALID_HANDLE = -2,
SQL_SUCCESS = 0,
SQL_SUCCESS_WITH_INFO = 1,
SQL_STILL_EXECUTING = 2,
SQL_NEED_DATA = 99,
SQL_NO_DATA = 100
}
Enum RequestFlags As Integer
ODBC_ADD_DSN = 1
ODBC_CONFIG_DSN = 2
ODBC_REMOVE_DSN = 3
ODBC_ADD_SYS_DSN = 4
ODBC_CONFIG_SYS_DSN = 5
ODBC_REMOVE_SYS_DSN = 6
ODBC_REMOVE_DEFAULT_DSN = 7
End Enum
Each time a new installer function is called the error queue is flushed. This means that you can only retrieve errors from the last installer function call, and not from ones before it.
SQLInstallerError does not post error values for itself. SQLInstallerError returns SQL_NO_DATA when it is unable to retrieve any error information (in which case pfErrorCode is undefined). If SQLInstallerError cannot access error values for any reason that would normally return SQL_ERROR, SQLInstallerError returns SQL_ERROR but does not post any error values. If either the lpszErrorMsg argument is NULL or the cbErrorMsgMax is less than or equal to 0, this function returns SQL_ERROR. If the buffer for the error message is too short, SQLInstallerError returns SQL_SUCCESS_WITH_INFO and returns the correct pfErrorCode value for SQLInstallerError.
Please add some!
StringBuilder errorMesg = new StringBuilder( 512 ) ;
int errorCode = 0 ;
int resizeErrorMesg = 0 ;
//
// Get the error message
//
SQL_RETURN_CODE retCode = SQLInstallerError(1, ref errorCode, errorMesg, errorMesg.Capacity, ref resizeErrorMesg );
Dim errorMsg As New StringBuilder(512)
Dim errorCode As Integer = 0
Dim resizeErrorMesg As Integer = 0
' Get the error message
Dim retCode As SQL_RETURN_CODE = SQLInstallerError(1, errorCode, errorMsg, errorMsg.Capacity, resizeErrorMesg)
Do you know one? Please contribute it!