Frage

Ich schreibe eine Anwendung, bei der ein Benutzer manuell eine Verbindungszeichenfolge liefert und ich frage mich, ob es eine Möglichkeit ist, dass ich die Verbindungszeichenfolge bestätigen konnte -. Ich meine, überprüfen, ob es korrekt ist und ob die Datenbank vorhanden ist

War es hilfreich?

Lösung

Sie könnten versuchen, zu verbinden? Für die schnelle (offline) Validierung, vielleicht DbConnectionStringBuilder es zu analysieren, verwenden ...

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

Aber um zu überprüfen, ob der db vorhanden ist, werden Sie versuchen müssen, zu verbinden. Einfachstes, wenn Sie wissen, die Anbieter, natürlich:

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

Wenn Sie nur den Anbieter als String (zur Laufzeit) kennen, dann DbProviderFactories verwenden:

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

Andere Tipps

Versuchen Sie dies.

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

Wenn das Ziel Gültigkeit und nicht die Existenz, die folgenden den Trick:

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

Für SQLite verwenden diese: Angenommen, Sie Verbindungszeichenfolge in Text txtConnSqlite haben

     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

Ich glaube, Sie easilly es zu c # -Code konvertieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top