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.
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();
}
Essaye ça.
try
{
using(var connection = new OleDbConnection(connectionString)) {
connection.Open();
return true;
}
}
catch {
return false;
}
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;
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 #