如何缩短 SQL 连接超时

How to make SQL connection timeout shorter

提问人:Greasul 提问时间:11/10/2023 最后编辑:Greasul 更新时间:11/10/2023 访问量:44

问:

我正在处理我的小项目,并尝试将我的 Windows 窗体应用程序连接到 SQL Server。 这是我的连接类的代码:

public class DatabaseConnection
{
    private string connectionString;
    private SqlConnection connection;

    public DatabaseConnection()
    {
        connectionString = "Data Source=xxx.xxx.x.x;Initial Catalog=xxxxxx;User ID=xxxxxx;Password=xxxxxxxx;Connect Timeout=5";
        connection = new SqlConnection(connectionString);
    }

    public bool OpenConnection()
    {
        try
        {
            connection.Open();
            return true;
        }
        catch (Exception)
        {
            connectionString = "Data Source=xxxxxxxxxxxx;Initial Catalog=xxxxxxx;User ID=xxxxxxx;Password=xxxxxxxx;Connect Timeout=5";
            connection = new SqlConnection(connectionString);

            try
            {
                connection.Open();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }

    public void CloseConnection()
    {
        connection.Close();
    }

    public SqlConnection GetConnection()
    {
        return connection;
    }
}

我试图将连接超时设置为 5 秒而不是 30 秒,因为当我加载我的应用程序并且它试图通过第一个 IP 连接并失败时,它等待 30 秒服务器发送错误,然后尝试通过第二个 IP 连接。 我的问题是如何使延迟时间达到 5 秒

我尝试了不同的方法,首先是向连接字符串添加连接超时属性:connectionString = "Data Source=xxxxxxxxx;Initial Catalog=xxxxx;User ID=xxxxxx;Password=xxxxxxxxxx;Connect Timeout=5";

第二种方法是将锁定超时设置为 5000 毫秒之前connection.open()

try
{
    using (SqlCommand command = new SqlCommand("SET LOCK_TIMEOUT 5000", connection))
    {
        connection.Open();
    }
    return true;
}
C# SQL Server 连接

评论

0赞 siggemannen 11/10/2023
不要依赖超时进行连接,因为它们并不总是足够快地工作。使用线程并自行管理超时
0赞 Dan Guzman 11/10/2023
添加到连接字符串中,以避免在 DNS 中注册多个侦听器 IP 地址时出现连接超时。 与连接超时无关。MultiSubnetFailover=trueLOCK_TIMEOUT

答:

0赞 Aaron 11/10/2023 #1

首先,如果您在公共论坛上发布密码、IP、用户名等,您应该屏蔽它们。

但是,回到您的问题:连接字符串中包含错误的属性

connectionString = "Data Source=XX.XXX.XXX:XXX;Initial Catalog=Hotsiy_NP;User ID=XXXX;Password=XXXXXXX;Connection Timeout=5";

它的连接超时不是连接超时: 请参阅 https://learn.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlconnection.connectiontimeout?view=dotnet-plat-ext-7.0 以供参考

评论

0赞 Greasul 11/10/2023
我找到了答案,谢谢
0赞 Jiji 11/11/2023
@Greasul,如果您找到了答案,请在此处发布,以便任何面临此类问题的人也可以从您的解决方案中受益。谢谢!