web-dev-qa-db-fra.com

Comment vérifier si la chaîne de connexion est valide?

J'écris une application où un utilisateur fournit manuellement une chaîne de connexion et je me demande s'il est possible de valider la chaîne de connexion. Je veux dire, vérifiez si elle est correcte et si la base de données existe.

71
agnieszka

Vous pourriez essayer de vous connecter? Pour une validation rapide (hors ligne), utilisez peut-être DbConnectionStringBuilder pour l'analyser ...

    DbConnectionStringBuilder csb = new DbConnectionStringBuilder();
    csb.ConnectionString = "rubb ish"; // throws

Mais pour vérifier si la base de données existe, vous devez essayer de vous connecter. Le plus simple si vous connaissez le fournisseur, bien sûr:

    using(SqlConnection conn = new SqlConnection(cs)) {
        conn.Open(); // throws if invalid
    }

Si vous ne connaissez le fournisseur que comme une chaîne (au moment de l'exécution), utilisez DbProviderFactories:

    string provider = "System.Data.SqlClient"; // for example
    DbProviderFactory factory = DbProviderFactories.GetFactory(provider);
    using(DbConnection conn = factory.CreateConnection()) {
        conn.ConnectionString = cs;
        conn.Open();
    }
132
Marc Gravell

Essaye ça. 

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

Si l'objectif est la validité et non l'existence, ce qui suit fera l'affaire:

try
{
    var conn = new SqlConnection(TxtConnection.Text);
}
catch (Exception)
{
    return false;
}
return true;
6
CBlafer

Pour sqlite, utilisez ceci: supposons que vous ayez une chaîne de connexion dans la zone de texte txtConnSqlite

     Using conn As New System.Data.SQLite.SQLiteConnection(txtConnSqlite.Text)
            Dim FirstIndex As Int32 = txtConnSqlite.Text.IndexOf("Data Source=")
            If FirstIndex = -1 Then MsgBox("ConnectionString is incorrect", MsgBoxStyle.Exclamation, "Sqlite") : Exit Sub
            Dim SecondIndex As Int32 = txtConnSqlite.Text.IndexOf("Version=")
            If SecondIndex = -1 Then MsgBox("ConnectionString is incorrect", MsgBoxStyle.Exclamation, "Sqlite") : Exit Sub
            Dim FilePath As String = txtConnSqlite.Text.Substring(FirstIndex + 12, SecondIndex - FirstIndex - 13)
            If Not IO.File.Exists(FilePath) Then MsgBox("Database file not found", MsgBoxStyle.Exclamation, "Sqlite") : Exit Sub
            Try
                conn.Open()
                Dim cmd As New System.Data.SQLite.SQLiteCommand("SELECT * FROM sqlite_master WHERE type='table';", conn)
                Dim reader As System.Data.SQLite.SQLiteDataReader
                cmd.ExecuteReader()
                MsgBox("Success", MsgBoxStyle.Information, "Sqlite")
            Catch ex As Exception
                MsgBox("Connection fail", MsgBoxStyle.Exclamation, "Sqlite")
            End Try
          End Using

Je pense que vous pouvez facilement le convertir en code c #

0
GGSoft