We are moving from a VB6 to a .Net based architecture for a 2-tier app that has a .Net client talking directly to DB400 on the AS400.
The existing VB6 application does not perform any transactional operations from the VB6 client and hence was not affected. There are multiple stored procedure data manipulation (insert/update) calls without any transactions in the existing VB6 application. These calls are wrapped in a transaction at the client in the new .NET application design. The transactions work well normally but there are issues in a scenario wherein the network was down during a transaction (possible since the CV60 will connect to the database using a wireless network) is under process. We tested such a scenario and found out that this leads to the connection between the .NET client and AS400 server (DB2) being broken but the server is unaware of this and will wait for a rollback or commit from the client until the connection on the server times out. The connection timeout for the database server is set to 2 hours (this is a global setting) and this cannot be changed as other devices connecting to the AS400 would also be affected by this setting. This would result in the rows modified (updated/insert/deleted) in a transactional scenario being locked for 2 hours.
Once the connection is broken, we can't seem to find a way to get the same connection back which means even our app cannot move forward until the timeout occurs after 2 hours.
We would like to know a) If DB400 or AS400 gives some way of reconnecting with the same info b) If there is a way to terminate the invalid connection immediately without touching the global timeout variable c) If something can be done at the client side to resolve the deadlock?