Troubleshooting Guide: SQL Server Error 3913 — TDS Reset Connection Protocol Conflict
Why This Error Happens
This error occurs when the TDS (Tabular Data Stream) protocol layer receives a connection reset packet from the client driver with two mutually exclusive flags set simultaneously: ResetConnectionKeepLocalXact and ResetConnectionKeepDTCXact. SQL Server interprets these as conflicting instructions because the first flag indicates a local transaction should persist across connection pooling resets, while the second indicates a distributed (MSDTC-enlisted) transaction should persist — the server cannot honor both contexts at once. This typically stems from an outdated, misconfigured, or buggy client driver (such as an older ODBC, OLE DB, or ADO.NET/Microsoft.Data.SqlClient provider) mishandling connection pooling logic when transactions span enlistment boundaries.
Step-by-Step Resolution Guide
Step 1: Identify and Update the Client Driver
- Check which driver the connecting application uses (SqlClient, ODBC Driver 17/18, OLE DB Driver for SQL Server, or JDBC).
- Navigate to Control Panel > Programs and Features on Windows Server 2025 / Windows 11 to confirm the installed driver version.
- Update to the latest Microsoft.Data.SqlClient NuGet package (version 5.x or later) or the newest Microsoft ODBC Driver 18 for SQL Server from the official Microsoft Download Center.
- Restart the application pool or service after the driver update completes.
Step 2: Review Connection Pooling and Transaction Enlistment Settings
- Inspect the application’s connection string for conflicting parameters, especially
Enlist=truecombined with manualTransactionScopeusage alongside local transaction calls (BeginTransaction). - In .NET applications, ensure code does not mix
System.Transactions.TransactionScope(which enlists in MSDTC) with explicitSqlTransactionobjects on the same connection. - Set
Enlist=falsein the connection string if distributed transactions are not required, located typically inweb.config,app.config, or the application’sappsettings.json.
Step 3: Validate MSDTC Configuration on the Server
- Open Component Services (
dcomcnfg.exe) on Windows Server 2025. - Navigate to Component Services > Computers > My Computer > Distributed Transaction Coordinator > Local DTC.
- Right-click Local DTC > Properties > Security tab and confirm “Network DTC Access,” “Allow Inbound,” and “Allow Outbound” are correctly enabled only if distributed transactions are genuinely needed.
- If DTC is not required, disable it in the application logic to prevent the driver from issuing the
ResetConnectionKeepDTCXactflag unnecessarily.
Step 4: Apply the Latest SQL Server 2025 Cumulative Update
- Open SQL Server Configuration Manager or check version via
SELECT @@VERSION;in SSMS. - Download and install the latest Cumulative Update (CU) for SQL Server 2025 from the Microsoft Update Catalog, as this specific TDS handshake conflict is addressed in protocol-layer patches.
- Reboot the SQL Server service (
net stop MSSQLSERVERthennet start MSSQLSERVER) after patching.
Step 5: Capture a Network Trace for Deep Diagnosis
- If the issue persists, use SQL Server Profiler or Extended Events to capture the
RPC:StartingandExisting Connectionevents around the failure timestamp. - Cross-reference with a Wireshark TDS packet capture to confirm which flags the client is sending during the PRELOGIN/reset phase.
Alternative or Verification Steps
- To verify the fix, run a load test simulating connection pool resets under transactional load and confirm Error 3913 no longer appears in the SQL Server error log (
ERRORLOGfile, typically located atC:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\). - As an alternative workaround, disable connection pooling entirely by setting
Pooling=falsein the connection string to confirm the driver is the root cause, then re-enable pooling only after the driver/application code fix is deployed.