如何检查连接字符串是否有效?

时间:2012-11-16 08:34:32

标签: c# .net sql-server-2008 ado.net connection-string

我必须保存数据,我必须先测试连接才能保存。如何测试此连接字符串对特定连接是否有效?

我的代码是这样的:

static public bool TestConnString(string connectionString)
{
    bool returnVal = true;
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        try
        {
            conn.Open();

            if (conn.State != ConnectionState.Open)
                returnVal = false;
            else
                returnVal = true;
        }
        catch (Exception ex)
        {
            returnVal = false;
        }
    }

    return returnVal;
}

连接字符串是:

Data Source=testSvr03\SQLEXPRESS;Initial Catalog=Test; Connection Timeout=600; Persist Security Info=True;User ID=Test; password=test 

如果我在连接字符串中给出了错误的数据源,那么在conn.open()之后它永远不会在这个函数中返回。我把catch块但它进来了

谁能告诉我什么是解决方案?

7 个答案:

答案 0 :(得分:10)

您可以让SqlConnectionStringBuilder构造函数检查它:

bool isValidConnectionString = true;
try{
    var con = new SqlConnectionStringBuilder("ABC");
}catch(Exception)
{
    // can be KeyNotFoundException, FormatException, ArgumentException
    isValidConnectionString = false;
}
不同数据提供者的ConnectionStringBuilders

Here's an overview

Provider                   ConnectionStringBuilder 
System.Data.SqlClient      System.Data.SqlClient.SqlConnectionStringBuilder
System.Data.OleDb          System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.Odbc           System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OracleClient   System.Data.OracleClient.OracleConnectionStringBuilder

答案 1 :(得分:7)

您可以将return语句放在catch块中,就像这样

static bool TestConnectionString(string connectionString)
{
    using (MySqlConnection conn = new MySqlConnection(connectionString))
    {
        try
        {
            conn.Open();

            return (conn.State == ConnectionState.Open);
        }
        catch
        {
            return false;
        }
    }
    return false;
}

我刚试过这个。如果用空字符串调用此函数,它可以正常工作(返回false值)。

答案 2 :(得分:3)

您可以尝试打开连接

SqlConnection myConnection = new SqlConnection(myConnString); 
try
{
   myConnection.Open();
}
catch(SqlException ex)
{
   //Failure to open
}
finally
{
   myConnection.Dispose();
}

你可以在后台线程中完成 你可以设置超时,如果你不想等待很长时间

答案 3 :(得分:2)

这是我最终使用的:

private bool validateConnectionString(string connString)
{
    try
    {
        var con = new SqlConnectionStringBuilder(connString);
        using (SqlConnection conn = new SqlConnection(connString))
        {
            conn.Open();
            return (conn.State == ConnectionState.Open);
        }
    }
    catch
    {
        return false;
    }
}

答案 4 :(得分:1)

试试这个。这是检查连接的最简单方法。

    try 
    {
        using(var connection = new OleDbConnection(connectionString)) {
        connection.Open();
        return true;
        }
    } 
    catch {
    return false;
    }

答案 5 :(得分:0)

你的意思是连接字符串?

好吧,这样的事可能......

try
{
//....try to connect and save it here, if connection can not be made it will throw an exception
}
catch(Exception ex)
{

}

答案 6 :(得分:0)

创建一个连接对象并尝试打开它。

如果连接字符串无效,则抛出异常。 像这样:

using(var connection = New SqlConnection("..."))
{
     connection.Open();
}