Skip to content

Connection Timeout Does not work for values less than 15 seconds; Workaround available #35

@ADMDTO-Jack

Description

@ADMDTO-Jack

Known issue with .net core older versions:

when connecting like so (ignore my own variables, relevant entry is ConnectionTimeout 1:
invoke-sqlcmd2 -ServerInstance $serverinstance -Database $database -Query $queryStr -SqlParameters $sqlparams -ConnectionTimeout 1 -ErrorAction Stop

the timeout actually still takes the full 15 seconds

this is related to issue:
dotnet sqlclient issue
workaround comment

I found it works utilizing the comment's suggestion, by adding the following lines to Invoke-SqlCmd2.ps1 at line 456 (inside of process foreach sqlinstance in serverinstance):

if ($ConnectionTimeout -lt 15 -and $ConnectionTimeout -gt 0) {
    Write-Debug "Setting MultiSubnetFailover to enforce sub-15s connection timeout"
    $CSBuilder["MultiSubnetFailover"] = $true
}

Reproduction: Attempt to invoke-sqlcmd2 with various connection timeout values set, to a sql server which does not exist on the network.

Workaround not necessarily recommended but posted here for reference, as it does appear to have the intended result. Higher timeouts and 0 timeouts not affected by this .net bug

(Note that setting timeout to 1s is not recommended, as it significantly increases failure rate without any particular connection/network issues. But with this change it would be possible.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions