Votre problème immédiat est probablement soit une chaîne de connexion incorrecte, soit le serveur de base de données n'est pas disponible. La chaîne de connexion devrait ressembler à ceci
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;
avec <username>
et <password>
remplacé par vos valeurs réelles.
En plus de cela, votre code a plusieurs problèmes et vous devriez certainement les examiner s'il est destiné à devenir du code de production et probablement même s'il ne s'agit que d'un projet jouet pour apprendre quelque chose. La liste est dans un ordre particulier et peut ne pas être exhaustive.
- Ne codez pas en dur votre chaîne de connexion. Déplacez-le plutôt vers un fichier de configuration.
- N'incluez pas de mots de passe en texte brut dans les fichiers de configuration ou le code source. Il existe différentes solutions comme authentification windows, certificats ou mots de passe protégés par l'API de protection des données Windows .
- Ne vous contentez pas de jeter
IDisposable
instances en appelantIDisposable.Dispose()
. Utilisez plutôt leusing
déclaration pour libérer des ressources même en cas d'exceptions. - Ne créez pas d'instructions SQL à l'aide de techniques de manipulation de chaînes. Utilisez plutôt
SqlParameter
pour empêcher les attaques par injection SQL. - Ne stockez pas de mots de passe en texte brut dans une base de données. Au lieu de cela, stockez au moins les hachages salés des mots de passe et utilisez une fonction de hachage lente, pas MD5 ou un membre du Famille SHA.
- Vous pouvez utiliser
IDbCommand.ExecuteScalar
pour récupérer un résultat scalaire et éviter d'utiliser un lecteur de données. - Comparer une valeur booléenne avec
true
oufalse
est redondant et ne fait qu'ajouter du bruit à votre code. Au lieu deif (reader.IsDBNull(0) == true)
vous pouvez simplement utiliserif (reader.IsDBNull(0))
. Il en va de même pourif (reader.Read() != false)
ce qui est équivalent àif (reader.Read() == true)
et donc aussiif (reader.Read())
. - Utiliser un mappeur O/R tel que Entity Framework est généralement préféré à l'interaction avec la base de données au niveau des commandes SQL.