2

データを保存する必要があり、保存する前に接続をテストする必要があります。この接続文字列が特定の接続に対して有効であることをテストするにはどうすればよいですか?

私のコードは次のようなものです:

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 ブロックを配置しましたが、その中に入っています

誰でも解決策を教えてもらえますか?

4

7 に答える 7

11

SqlConnectionStringBuilderコンストラクターにチェックさせることができます。

bool isValidConnectionString = true;
try{
    var con = new SqlConnectionStringBuilder("ABC");
}catch(Exception)
{
    // can be KeyNotFoundException, FormatException, ArgumentException
    isValidConnectionString = false;
}

ConnectionStringBuildersさまざまなデータプロバイダーの概要は次のとおりです。

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
于 2012-11-16T09:18:36.177 に答える
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 値を返します)。

于 2013-07-07T19:21:50.350 に答える
3

接続を開こうとするだけです

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

バックグラウンドスレッドでそれを行うことができ、タイムアウトを設定できます。長く待ちたくない場合

于 2012-11-16T08:53:03.380 に答える
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;
    }
}
于 2014-03-11T11:58:10.473 に答える
1

これを試して。これは、接続を確認する最も簡単な方法です。

    try 
    {
        using(var connection = new OleDbConnection(connectionString)) {
        connection.Open();
        return true;
        }
    } 
    catch {
    return false;
    }
于 2014-03-28T09:09:39.530 に答える
0

接続文字列のことですか?

うーん、こういうこともあるのかな…

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

}
于 2012-11-16T08:46:27.267 に答える
0

接続オブジェクトを作成し、それを開こうとします。

接続文字列が無効な場合、例外がスローされます。このようなもの:

using(var connection = New SqlConnection("..."))
{
     connection.Open();
}
于 2012-11-16T08:49:52.000 に答える