74 votes

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

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

141voto

Marc Gravell Points 482669

Vous pouvez 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 est de connaître le fournisseur, bien sûr :

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

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

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

13voto

Rashad Annara Points 572

Essayez ça.

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

7voto

CBlafer Points 141

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;

0voto

GGSoft Points 389

Pour sqlite, utilisez ceci : Supposons que vous avez 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#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X