Uw directe probleem is waarschijnlijk een onjuiste verbindingsreeks of de databaseserver is niet beschikbaar. De verbindingsreeks zou er ongeveer zo uit moeten zien
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;
met <username>
en <password>
vervangen door uw werkelijke waarden.
Daarnaast heeft je code verschillende problemen en je moet er zeker naar kijken als dit bedoeld is om productiecode te worden en waarschijnlijk zelfs als dit slechts een speelgoedproject is om iets te leren. De lijst is in een bepaalde volgorde en is mogelijk niet volledig.
- Geef uw verbindingsreeks geen harde code. Verplaats het in plaats daarvan naar een configuratiebestand.
- Neem geen wachtwoorden in platte tekst op in configuratiebestanden of broncode. Er zijn verschillende oplossingen zoals windows-authenticatie, certificaten of wachtwoorden beveiligd door de Windows Data Protection API .
- Gooi
IDisposable
niet zomaar weg instanties doorIDisposable.Dispose()
. aan te roepen . Gebruik in plaats daarvan deusing
verklaring om middelen vrij te geven, zelfs in het geval van uitzonderingen. - Bouw geen SQL-instructies op met behulp van tekenreeksmanipulatietechnieken. Gebruik in plaats daarvan
SqlParameter
om SQL-injectie-aanvallen te voorkomen. - Sla wachtwoorden in platte tekst niet op in een database. Sla in plaats daarvan op zijn minst gezouten hashes van de wachtwoorden op en gebruik een langzame hash-functie, niet MD5 of een lid van de SHA-familie.
- Je kunt
IDbCommand.ExecuteScalar
om een scalair resultaat op te halen en het gebruik van een gegevenslezer te vermijden. - Een booleaanse waarde vergelijken met
true
offalse
is overbodig en voegt alleen ruis toe aan uw code. In plaats vanif (reader.IsDBNull(0) == true)
je kunt gewoonif (reader.IsDBNull(0))
. gebruiken . Hetzelfde geldt voorif (reader.Read() != false)
wat is gelijk aanif (reader.Read() == true)
en dus ookif (reader.Read())
. - Een O/R-mapper gebruiken zoals het Entity Framework heeft meestal de voorkeur boven interactie met de database op het niveau van SQL-commando's.