IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Problème Connexion à la base


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut Problème Connexion à la base
    Je suis entrain de développer une application ASP MVC 3 en utilisant le language C# et l'éditeur Visual Studio 2010 et une base de donnée SQL Server 2005.
    Je veux faire des enregistrements dans ma base, mais je n'arrive pas car la connexion est échouée.
    Je ne sais pourquoi ? J'ai bien vérifié mes paramètres de connexion (nom de serveur, nom de la base, iduser, mot de passe...)
    J'ai fais aussi un test de connexion manuellement (Tools/Add Connexion) et ça marchait.
    Voici le message d'erreur qui apparait :
    Impossible d'ouvrir la base de données "Gamme.MDF" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'adminUser'.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.SqlClient.SqlException: Impossible d'ouvrir la base de données "Gamme.MDF" demandée par la connexion. La connexion a échoué.
    Échec de l'ouverture de session de l'utilisateur 'adminUser'.

    Source Error:


    Line 97: SqlConnection cn = new SqlConnection(@"Data Source=SWEET-DE396641E\SQLEXPRESS;User Id=adminUser;Password=adminUser;DataBase=Gamme.MDF");
    Line 98: SqlCommand cmd = new SqlCommand("Insert Into User(Matricule, Nom_User,PassWord, Type_User )Values('"+Matricule+"','"+Nom_User+"','"+passWord+"','"+Type_User+"')", cn);
    Line 99: cn.Open();
    Line 100: return cmd.ExecuteNonQuery();
    Line 101: }
    Voilà une partie de mon controlleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [AcceptVerbs(HttpVerbs.Post)]
          public ActionResult AddUser(MvcApplication2.Models.AddUserModel am )
          {
              ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
     
              //if (ValidateAjout(Matricule, Nom_User, passWord, Type_User))
     
                  if (!ModelState.IsValid)
                  {
     
     
                      int _records = am.Insert(am.Matricule, am.Nom_User, am.passWord, am.Type_User);
                      if (_records > 0)
                      {
                          return RedirectToAction("Index", "Home");
                      }
                      else
                      {
                          ModelState.AddModelError("", "Can Not Insert");
                      }
     
                  }
     
                  return View();
     
          }
    et une partie de modele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class AddUserModel
        {
            [Required]
            [Display(Name = "Matricule :")]
            public string Matricule { get; set; }
     
            [Required]
            [Display(Name = "Nom :")]
            public string Nom_User { get; set; }
     
            [Required]
            [StringLength(100, ErrorMessage = "Le {0} doit avoir au minimum {2} caractères.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Mot de passe :")]
            public string passWord { get; set; }
     
            [DataType(DataType.Password)]
            [Display(Name = "Confirmer mot de passe :")]
            [Compare("Password", ErrorMessage = "Le mot de passe ne correspond pas la confirmation !")]
            public string ConfirmPassword { get; set; }
     
            [Required]
            [Display(Name = "Type :")]
            public string Type_User { get; set; }
     
            public int Insert(string Matricule, string Nom_User, string passWord, string Type_User)
            {
                SqlConnection cn = new SqlConnection(@"Data Source=SWEET-DE396641E\SQLEXPRESS;User Id=adminUser;Password=adminUser;DataBase=Gamme.MDF");
                SqlCommand cmd = new SqlCommand("Insert Into User(Matricule, Nom_User,PassWord, Type_User )Values('"+Matricule+"','"+Nom_User+"','"+passWord+"','"+Type_User+"')", cn);
                cn.Open();
                return cmd.ExecuteNonQuery();
            }
        }
    Y-a-il une solution SVP, j'attends vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    L’utilisateur adminUser n'a pas pu se connecter. Vérifier que l'identifiant est correct et aussi le mot de passe.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Oui je les ai vérifie et je refait la vérification maintenant . Tous est correct !!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si tout est correct alors vérifie que l'utilisateur concerné a les droits d'accéder à la base de données. SSMS permet d'octroyer les droits pour un utilisateur sur une base de données. Une recherche sur le net te fera savoir comment faire la manip.

    Sinon t'es sûr que ta base de données s'appelle Gamme.MDF. Essaie avec Gamme sans l'extension.

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (@"Data Source=SWEET-DE396641E\SQLEXPRESS;User Id=adminUser;Password=adminUser;DataBase=Gamme.MDF");
    Gamme.MDF me parait plus être un nom de fichier de base qu'un nom de base. Dans la chaine de connexion c'est le nom de la base qui doit être affecté à la propriété DataBase, pas le nom du fichier, que le programme n'a d'ailleurs pas à connaitre.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Merci pour ta réponse. C bon je suis arrivé à fixer l'erreur en changeant l'instruction de la connexion par celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlConnection cn = new SqlConnection(@"Data Source = SWEET-DE396641E \ SQLEXPRESS; User Id = adminUser; Password = adminUser; Initial Catalog = Gamme");
    Mais je ne peux pas faire des enregistrements dans la base ! cette erreur persiste :
    L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "FK_Users_Account". Le conflit s'est produit dans la base de données "Gamme", table "dbo.Account", column 'Type_User'.
    L'instruction a été arrêtée. manuellement
    NB:
    Je peux faire des enregistrements manuellement c'est à dire sans saisi dans la formulaire juste dans le code et ceci en changeant cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, Nom_User,PassWord, Type_User )Values('"+Matricule+"','"+Nom_User+"','"+passWord+"','"+Type_User+"')", cn);
    par celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, Nom_User,PassWord, Type_User )Values('user2','anouar','anouar','Admin')", cn);

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Pour bien clarifier le problème, lorsque je met le curseur sur les paramètres dans l'instruction qui j'ai deja parlé (matricule,...),,,l'éditeur m'indique qu'elles sont NULL

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Les contraintes de clef étrangère indiquent qu'il faut un identifiant pour faire référence à un enregistrement dans une table liée. Le champ qui me semble être la raison du plantage est "Type_User". Est-ce que sa valeur est NULL? Est-ce que sa valeur existe bien dans la table?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Merci pour ta réponse,
    Non le problème n'est pas lié à la base ou ces trucs de clé étrangères mais juste cet erreur apparaisse parce que les champs sont pris comme NULL.
    Bref,
    lorsque j'ajoute manuellement c'est à dire cette instruction marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, )Values('user1'), cn);
    mais lorsque je veux insérer en saisant le champs dans un commentaire, sa marche pas comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, )Values('" + Matricule + "')", cn);

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par pizzaman Voir le message
    Merci pour ta réponse,
    Non le problème n'est pas lié à la base ou ces trucs de clé étrangères
    Si.

  11. #11
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Petit détail : faire de la concatenation de paramètres n'est pas une bonne pratique car tu es vulnerable aux attaques de type injection SQL

    Préfère plutôt une requête construite de cette manière:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT field1 FROM example WHERE (ID=@ID)"

    Et ensuite dans ta commande tu fais:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlCommand.Parameters.Add("@ID", le_bon_type).Values = ta_valeur;

    synthaxiquement c'est grosso-modo ça. Et comme ça tu n'aura plus de problème d'injection SQL

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Merci pour vos réponses,
    Pour BlueDeep :
    Je pense qu'il ne s'agit d'un problème de base parce que l'INSERT fonctionne si j'entre les valeurs dans la requête.
    En effet, l'application mentionne une erreur à la base car les champs sont pris comme NULL et ceci va engendrer des problèmes dans les relations entre les tables (clé étrangers...)

    Pour Leelith:
    Même avec cette solution, le problème persiste encore !
    J'ai changé mon code comme ci-dessus et ça n'a pas marché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public int Insert(string Matricule, string Nom_User, string passWord, string Type_User)
            {
                SqlConnection cn = new SqlConnection(@"Data Source = SWEET-DE396641E \ SQLEXPRESS; User Id = adminUser; Password = adminUser; Initial Catalog = Gamme");
                cn.Open();
     
     
                string sqlquery = ("Insert Into Users(Matricule, Nom_User,PassWord, Type_User )Values(@Matricule, @Nom_User, @passWord, @Type_User)");
                SqlCommand cmd = new SqlCommand(sqlquery, cn);
     
                cmd.Parameters.AddWithValue("@Matricule", Matricule);
                cmd.Parameters.AddWithValue("@Nom_User", Nom_User);
                cmd.Parameters.AddWithValue("@passWord", passWord);
                cmd.Parameters.AddWithValue("@Type_User", Type_User);
                return cmd.ExecuteNonQuery();
            }

  13. #13
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Attention, ce que j'ai proposé n'était pas sensé résoudre ton problème

    Mais tu as effectivement une contrainte de clé, tu devrais regarder cette direction. Tu as ton champ Type_User qui est une clé étrangère de ta table Account. Regarde la contrainte qui existe et les valeurs présente dans la table par exemple.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Non ce n'est pas ça le problème car si j'entre les valeurs dans le code, l'insertion dans la base s'effectue c'est à dire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public int Insert(string Matricule, string Nom_User, string passWord, string Type_User)
            {
                SqlConnection cn = new SqlConnection(@"Data Source = SWEET-DE396641E \ SQLEXPRESS; User Id = adminUser; Password = adminUser; Initial Catalog = Gamme");
                cn.Open();
     
     
                string sqlquery = ("Insert Into Users(Matricule, Nom_User,PassWord, Type_User )Values(@Matricule, @Nom_User, @passWord, @Type_User)");
                SqlCommand cmd = new SqlCommand(sqlquery, cn);
     
                cmd.Parameters.AddWithValue("@Matricule", "user1");
                cmd.Parameters.AddWithValue("@Nom_User", "aaa");
                cmd.Parameters.AddWithValue("@passWord", "aaa";
                cmd.Parameters.AddWithValue("@Type_User", "Admin");
                return cmd.ExecuteNonQuery();
            }

  15. #15
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Mais est-ce que ta variable a bien une valeur? Si tu mets un point d'arrêt avant d'exécuter la requête quelle est la valeur de Matricule.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Mais est-ce que ta variable a bien une valeur? Si tu mets un point d'arrêt avant d'exécuter la requête quelle est la valeur de Matricule.

    A+
    c'est NULL

  17. #17
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Ben ne cherche pas plus loin alors... Valorise "Matricule".
    "Winter is coming" (ma nouvelle page d'accueil)

  18. #18
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Ben ne cherche pas plus loin alors... Valorise "Matricule".
    lol c'est ça le problème, je la valorise mais elle est pris toujours comme NULL

  19. #19
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Ben si sa valeur est NULL c'est normal. Si c'est la valeur avec laquelle elle arrive dans ta fonction Insert, essaye de trouver pourquoi en remontant le fil. Peut-être que tu as laissé trainer un Matricule = null; quelque part.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  20. #20
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 72
    Par défaut
    Merci pour ta réponse,

    Bref,
    lorsque j'ajoute manuellement c'est à dire cette instruction marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, )Values('user1'), cn);
    mais lorsque je veux insérer en saisant le champs dans un commentaire, sa marche pas comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlCommand cmd = new SqlCommand("Insert Into Users(Matricule, )Values('" + Matricule + "')", cn);

Discussions similaires

  1. Problème connexion à la base de données
    Par lordatef dans le forum Général Java
    Réponses: 4
    Dernier message: 09/05/2011, 15h50
  2. Problème connexion à la base de données
    Par isammm dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 08/05/2011, 18h54
  3. problème connexion à une base de données
    Par anissben dans le forum C++Builder
    Réponses: 0
    Dernier message: 10/10/2010, 22h54
  4. problème connexion à une base access
    Par meavy dans le forum JDBC
    Réponses: 1
    Dernier message: 14/01/2009, 11h01
  5. problème connexion à la base
    Par Tanebisse dans le forum Tomcat et TomEE
    Réponses: 14
    Dernier message: 17/06/2008, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo