Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不等待30秒的情况下快速检查SQL连接;_C#_Sql Server_Sqlconnection - Fatal编程技术网

C# 如何在不等待30秒的情况下快速检查SQL连接;

C# 如何在不等待30秒的情况下快速检查SQL连接;,c#,sql-server,sqlconnection,C#,Sql Server,Sqlconnection,如果我有一个基于用户输入的连接字符串,我想快速确定它是否是有效的输入。我做了一些研究,人们似乎使用.Open()来检查连接。但是,在我的控制台应用程序中,此检查需要约30秒才能抛出catch语句。有没有更快的方法 编辑:你们中的一些人建议将超时设置为低值,如1。这不值得担心吗?考虑到默认设置为30,我担心在一个有效但缓慢的连接上过早超时 如果您需要,这是我的代码: while (sqlManager == null) { try { sqlManager = ne

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

编辑:你们中的一些人建议将超时设置为低值,如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
属性定义更短的等待时间:

默认值为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();
}

我很想知道是否有更快的方法。每当用户输入错误时,基本上挂起30秒是非常烦人的…可以配置连接超时设置连接超时=1好的,你是说输入看起来有效,还是说它是一个实际/真实的SQL连接?您可能需要配置一些正则表达式,以查看它对于快速验证是否有效。但是如果你说的是看连接是否真实,你可能需要用一个较低的超时来测试Open,后者则不管它看起来如何。只是想知道是否建立了连接。这真的是最好的方法吗?我只是担心,如果我将它设置为像1这样的快,我会担心一个有效的连接可能会因为连接太慢而将其作为无效连接抛出。。特别是考虑到默认值已设置为30@CapnJack好吧,不然你怎么能分辨出一个速度慢的服务器和一个没有响应的服务器之间的区别呢。这不仅是最好的方法,实际上也是唯一的方法。你说的是命令行工具。。。如果您在第一次尝试时超时1秒或2秒,请给用户一个选择,例如“重试连接尝试,超时时间更长”。我希望您中的一位能够告诉我lol。。我想我必须使用超时方法。谢谢我不知道我是不是愚蠢或者这不管用
SqlConnection.ConnectionTimeout
似乎没有设置选项。编辑:nvm您必须在连接字符串中执行此操作。