如何在不等待 connection.open() 30 秒的情况下快速检查 SQL 连接;

How to quickly check a SQL connection without waiting 30 seconds for connection.open();

如果我有一个基于用户输入的连接字符串并且我想快速确定它是否是一个有效输入。我做了一些研究,似乎人们使用 .Open() 来检查连接。然而,在我的控制台应用程序中,此检查在抛出 catch 语句之前需要大约 30 秒。有更快的方法吗?

EDIT:你们中的一些人建议将超时设置为较低的值,例如 1。这难道不值得关注吗?考虑到默认设置为 30 我担心在有效但缓慢的连接上超时太早。

如果您需要,这是我的代码:

while (sqlManager == null)
{
    try
    {
        sqlManager = new SqlManager(Console.ReadLine());
    }
    catch
    {
        sqlManager = null;
        Console.WriteLine("values entered could not be used to establish a connection, please try again: ");
    }
}
public class SqlManager
{
    public SqlManager(string userEntry)
    {
        string server;
        string db;
        if (userEntry == "")
        {
            server = Properties.Settings.Default.SqlServer;
            db = Properties.Settings.Default.SqlDatabase;
        }
        else
        {
            var splits = userEntry.Split(' ');
            server = splits[0];
            db = splits[1];
        }
        SqlConnection con = new SqlConnection($"Server= {server}; Database= {db}; Integrated Security=True;");
        con.Open();
    }
}

使用ConnectionTimeout 属性定义更短的等待时间:

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout(v=vs.110).aspx

默认为 15 或 30 秒,当前文档提到 15...您可以将其设置为任何更大或更小的数字。 0 表示无限等待。

实际上更改默认设置有点棘手,因为 SqlConnection class 上的 ConnectionTimeout 属性 是只读的。您必须将其指定为连接字符串的一部分,或使用连接字符串生成器,如下所示:

var connstr = new SqlConnectionStringBuilder
{
    DataSource = "servername",
    IntegratedSecurity = true,
    ApplicationIntent = ApplicationIntent.ReadOnly,
    ApplicationName = "appname",
    InitialCatalog = "db",
    ConnectTimeout = 2
}.ConnectionString;

using (var conn = new SqlConnection { ConnectionString = connstr })
{                        
    conn.Open();
}