如何快速检查 SQL 连接,而无需等待 30 秒的 connection.open();



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

编辑:你们中的一些人建议将超时设置为较低的值,如 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类上的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();
}

最新更新