How to fix Error 3913 on Windows Server 2025 / Windows 11

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=true combined with manual TransactionScope usage alongside local transaction calls (BeginTransaction).
  • In .NET applications, ensure code does not mix System.Transactions.TransactionScope (which enlists in MSDTC) with explicit SqlTransaction objects on the same connection.
  • Set Enlist=false in the connection string if distributed transactions are not required, located typically in web.config, app.config, or the application’s appsettings.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 ResetConnectionKeepDTCXact flag 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 MSSQLSERVER then net 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:Starting and Existing Connection events 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 (ERRORLOG file, typically located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\).
  • As an alternative workaround, disable connection pooling entirely by setting Pooling=false in the connection string to confirm the driver is the root cause, then re-enable pooling only after the driver/application code fix is deployed.