DBX Error Handling
Posted: Tue 09 Oct 2018 14:34
Hello,
IDE delphi 2009 Database: SQL Server
Our application is a multi-threaded application, in past we were using dbxmss driver for database connectivity and it works fine for TLS protocol 1.0 and 1.1 but it doesn't support TLS protocol 1.2.
For this problem we got the Devart DBExpress driver version 7.4.6, compiled the dbexpsda40 dll and set the required parameters as below: it works fine for TLS protocol 1.2 and also for earlier versions 1.0. 1.1 which is good
dbexpsda40.dll (compiled )
Driver Name : DevartSQLServer
Driver Function : getSQLDriverSQLServer
Library Name : dbexpsda40.dll
Vendor Library : sqlncli11
However, In our application we check the database connection sanity by executing a simple SQL query after defined interval (15/30 seconds) if application gets disconnected due to any reason (network problem, SQL service stop etc.. )application goes into retry mechanism. Before Devaert retry mechanism was triggering on specific TDBXError error codes 16389 (network error ) or 101 (connection error)
While doing Devart DBExpress driver development testing we have found that in case of failure in most scenarios DBXErrorCode:65535 is returned.
1) If SQL service is stopped and start the application connection failed DBXErrorCode:65535
2) If SQL server is on remote machine and network has disconnected start the application connection failed DBXErrorCode:65535
3) In valid SQL due to any reason colunm name or table name is incorrect or missing DBXErrorCode:65535
4) Database name is missing or incorrect DBXErrorCode:65535
Questions:
1) DBXErrorCode:65535 is same for all different types of failure? i have noticed only in case of authentication failure DBXErrorCode: 12 is returned.
2) how we can differentiate is it connection failure (network issue / SQL service is not responding )or Invalid SQL failure?
3) I can see TDBXError has TDBXErrorCodes constant class but TDBXError exception error code always come up with 65535
NoMemory = $0002;
UnsupportedFieldType = $0003;
ConnectionFailed = $0015;
Thanks,
Amjad
IDE delphi 2009 Database: SQL Server
Our application is a multi-threaded application, in past we were using dbxmss driver for database connectivity and it works fine for TLS protocol 1.0 and 1.1 but it doesn't support TLS protocol 1.2.
For this problem we got the Devart DBExpress driver version 7.4.6, compiled the dbexpsda40 dll and set the required parameters as below: it works fine for TLS protocol 1.2 and also for earlier versions 1.0. 1.1 which is good
dbexpsda40.dll (compiled )
Driver Name : DevartSQLServer
Driver Function : getSQLDriverSQLServer
Library Name : dbexpsda40.dll
Vendor Library : sqlncli11
However, In our application we check the database connection sanity by executing a simple SQL query after defined interval (15/30 seconds) if application gets disconnected due to any reason (network problem, SQL service stop etc.. )application goes into retry mechanism. Before Devaert retry mechanism was triggering on specific TDBXError error codes 16389 (network error ) or 101 (connection error)
While doing Devart DBExpress driver development testing we have found that in case of failure in most scenarios DBXErrorCode:65535 is returned.
1) If SQL service is stopped and start the application connection failed DBXErrorCode:65535
2) If SQL server is on remote machine and network has disconnected start the application connection failed DBXErrorCode:65535
3) In valid SQL due to any reason colunm name or table name is incorrect or missing DBXErrorCode:65535
4) Database name is missing or incorrect DBXErrorCode:65535
Questions:
1) DBXErrorCode:65535 is same for all different types of failure? i have noticed only in case of authentication failure DBXErrorCode: 12 is returned.
2) how we can differentiate is it connection failure (network issue / SQL service is not responding )or Invalid SQL failure?
3) I can see TDBXError has TDBXErrorCodes constant class but TDBXError exception error code always come up with 65535
NoMemory = $0002;
UnsupportedFieldType = $0003;
ConnectionFailed = $0015;
Thanks,
Amjad