Ihr unmittelbares Problem ist wahrscheinlich entweder eine falsche Verbindungszeichenfolge oder der Datenbankserver ist nicht verfügbar. Die Verbindungszeichenfolge sollte in etwa so aussehen
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;
mit <username> und <password> durch Ihre tatsächlichen Werte ersetzt.
Abgesehen davon hat Ihr Code mehrere Probleme und Sie sollten sich diese unbedingt ansehen, wenn dies beabsichtigt ist, Produktionscode zu werden, und wahrscheinlich sogar, wenn dies nur ein Spielzeugprojekt ist, um etwas zu lernen. Die Liste ist in einer bestimmten Reihenfolge und möglicherweise nicht vollständig.
- Kodieren Sie Ihre Verbindungszeichenfolge nicht hart. Verschieben Sie es stattdessen in eine Konfigurationsdatei.
- Fügen Sie keine Klartext-Passwörter in Konfigurationsdateien oder Quellcode ein. Es gibt verschiedene Lösungen wie Windows-Authentifizierung, Zertifikate oder kennwortgeschützt durch die Windows Data Protection API .
- Entsorgen Sie
IDisposablenicht einfach Instanzen durch Aufrufen vonIDisposable.Dispose(). Verwenden Sie stattdessen denusingAnweisung, Ressourcen auch im Ausnahmefall freizugeben. - Erstellen Sie keine SQL-Anweisungen mit String-Manipulationstechniken. Verwenden Sie stattdessen
SqlParameterum SQL-Injection-Angriffe zu verhindern. - Speichern Sie keine Klartext-Passwörter in einer Datenbank. Speichern Sie stattdessen zumindest gesalzene Hashes der Passwörter und verwenden Sie eine langsame Hash-Funktion, nicht MD5 oder ein Mitglied der SHA-Familie.
- Sie können
IDbCommand.ExecuteScalarum ein skalares Ergebnis abzurufen und die Verwendung eines Datenlesegeräts zu vermeiden. - Einen booleschen Wert mit
truevergleichen oderfalseist überflüssig und fügt Ihrem Code nur Rauschen hinzu. Stattif (reader.IsDBNull(0) == true)Sie können einfachif (reader.IsDBNull(0))verwenden . Dasselbe gilt fürif (reader.Read() != false)was äquivalent zuif (reader.Read() == true)ist und damit auchif (reader.Read()). - Verwendung eines O/R-Mappers wie Entity Framework wird normalerweise der Interaktion mit der Datenbank auf der Ebene von SQL-Befehlen vorgezogen.