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.
Réponses
Trop de publicités?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();
}
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#.