Dit umiddelbare problem er sandsynligvis enten en forkert forbindelsesstreng, eller databaseserveren er ikke tilgængelig. Forbindelsesstrengen skal være sådan her
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;
med
Udover at din kode har flere problemer, og du bør helt sikkert undersøge dem, hvis dette er beregnet til at blive produktionskode, og sandsynligvis selvom dette bare er et legetøjsprojekt for at lære noget. Listen er i en bestemt rækkefølge og er muligvis ikke udtømmende.
- Undlad at hårdkode din forbindelsesstreng. Flyt den i stedet til en konfigurationsfil.
- Inkluder ikke almindelig tekstadgangskoder i konfigurationsfiler eller kildekode. Der er forskellige løsninger såsom windows-godkendelse, certifikater eller beskyttede adgangskoder af Windows Data Protection API .
- Smid ikke bare
ID-disposable
instanser ved at kaldeIDisposable.Dispose()
. Brug i stedetusing
erklæring om at frigive ressourcer, selv i tilfælde af undtagelser. - Opbyg ikke SQL-sætninger ved hjælp af strengmanipulationsteknikker. Brug i stedet
SqlParameter
for at forhindre SQL-injektionsangreb. - Opbevar ikke almindelige tekstadgangskoder i en database. Opbevar i det mindste saltede hashes af adgangskoderne og brug en langsom hash-funktion, ikke MD5 eller et medlem af SHA-familie.
- Du kan bruge
IDbCommand. ExecuteScalar
for at hente et skalært resultat og undgå at bruge en datalæser. - Sammenligning af en boolesk værdi med
true
ellerfalsk
er redundant og tilføjer bare støj til din kode. I stedet forif (reader.IsDBNull(0) ==sand)
du kan bare brugeif (reader.IsDBNull(0))
. Det samme gælder forif (reader.Read() !=falsk)
hvad der svarer tilif (reader.Read() ==sand)
og derfor ogsåif (reader.Read())
. - Brug af en O/R-mapper som Entity Framework foretrækkes normalt frem for at interagere med databasen på niveau med SQL-kommandoer.