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

C# Discussion :

Problème d'enregistrement dans une base SqlServer


Sujet :

C#

  1. #61
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à SaumonAgile
    Salut,

    C'est vrai que le statut n'est pas de type string mai de type VarChar mais le problème c'est qu'il n'existe pas de GetVarChar.
    Donc que puis-je mettre a la place??
    merci d'avance!!

  2. #62
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Normalement, c'est GetString justement... Tu as vérifié que le champ n'était pas DBNull.Value avant d'appeler la méthode GetString. Il y a une méthode IsDbNull sur le reader, elle sert à tester si le champ est rempli avant de pouvoir y accéder.

  3. #63
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Ben même si je met IsDbNull ca revient au même.
    J'ai pas compris ce que ta voulu dire par :
    Tu as vérifié que le champ n'était pas DBNull.Value
    Qu'a tu voulu dire par là?? Comment dois-je faire??

    merci d'avance!!

  4. #64
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Avant de lire une donnée d'un reader, on vérifie toujours qu'il y a une donnée dedans, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (monReader.Read())
    {
        String valeur = null;
        // On part du principe que le champ à l'index 0 est de type nvarchar dans la base
        if (monReader.IsDbNull(0) == false)
            valeur = monReader.GetString(0);
    }
    Au pire, pour déterminer quelle méthode GetXXX tu dois utiliser, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object value = reader.GetValue(0);
    En mettant un point d'arrêt sur cette instruction, tu pourras déterminer quel type a été mis dans object et ensuite, à partir de là, tu sauras quel GetXXX il fallait utiliser.

  5. #65
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Ben g beau mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object value = rader.GetValue(0);
    mais cela me donne rien car a chque fois l'instruction s'arréte au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlDataReader rader = command.ExecuteReader();
    je comprend pas comment faire la vraiment suis big bloké!!

    merci d'avance pour toute votre aide a tous!!

  6. #66
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je vient de tester la requête sous l'analyseur de requête de SqlServer grâce au debuggage et a l'espion (ajouter un espion) mais le problème c'est qu'il ne change pas @nomclt avec le résultat choisi précédement c'est à dire que @nomClt reste @nomClt.

    Il vient peut être de la mon problème?? Qu'en pensez-vous??

    Faut savoir également que quand j'ai voulu tester avec l'analyseur de requête, il m'a affiché :
    Serveur*: Msg 137, Niveau 15, État 2, Ligne 1
    La variable '@NomClt' doit être déclarée.
    comment je peux résoudre ce problème d'après vous??

    merci d'avance!!

  7. #67
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Je vient de tester la requête sous l'analyseur de requête de SqlServer grâce au debuggage et a l'espion (ajouter un espion) mais le problème c'est qu'il ne change pas @nomclt avec le résultat choisi précédement c'est à dire que @nomClt reste @nomClt.

    Il vient peut être de la mon problème?? Qu'en pensez-vous??

    Faut savoir également que quand j'ai voulu tester avec l'analyseur de requête, il m'a affiché :

    comment je peux résoudre ce problème d'après vous??

    merci d'avance!!
    Tu peux pas procéder ainsi, car tu utilise une requête avec des paramétres et non des valeurs(qui sont intérprété lors de la compilation) requête destiné à être utiliser par un programme .NET (en utilisant une particularité d'ADO.NET et non de SQL).
    Bref, si tu veux faire des tests directement dans SQL Server, il te faut mettre des valeurs ...
    Ton problème ne peut venir en aucun de la.

  8. #68
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Ok. C'est vrai vu comme ça tu as tout a fais raison.

    Mais d'ou peux provenir mon problème alors??

    merci d'avance!!

  9. #69
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je vois pas du tout comment je peux résoudre mon problème qui est le suivant :
    Lorsque j'exécute mon application, je choisi le nom du client mais lorsqu'il doit m'afficher le statut du client, il m'affiche l'erreur suivante :
    " Une exception non gérée du type 'System.InvalidCastException' s'est produite dans system.data.dll

    Informations supplémentaires*: L'objet doit implémenter IConvertible."
    j'attend vraiment votre aide car je vois pas du tout comment régler ce problème.
    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
    SqlConnection connection;
    			SqlCommand command;
    			connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI");
    			connection.Open();
    			string requete = ("SELECT C_STATUCLT FROM CLIENT WHERE CLIENT.C_NOMCLT= @NomClt");
    			command = new SqlCommand(requete,connection);
    			command.Parameters.Add("@NomClt", SqlDbType.VarChar);
    			command.Parameters["@NomClt"].Value = NomClient;
    			SqlDataReader rader = command.ExecuteReader();
    			try
    			{
    				while (rader.Read())
    				{
    					string value = null;
    					// On part du principe que le champ à l'index 0 est de type nvarchar dans la base
    					if (rader.IsDBNull(0) == false)
    					{
    						value = rader.GetString(0);
    					}
    				}
    			}
    			catch(Exception ee)
    			{
    				MessageBox.Show(ee.Message);
    			}
    			finally
    			{
    				connection.Close();
    			}
    merci d'avance pour votre aide!!

  10. #70
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    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
    			try
    			{
    				while (rader.Read())
    				{
    					string value = null;
    					// On part du principe que le champ à l'index 0 est de type nvarchar dans la base
    					if (rader.IsDBNull(0) == false)
    					{
    						value = rader.GetString(0);
    					}
    				}
    			}
    			catch(Exception ee)
    			{
    				MessageBox.Show(ee.Message);
    			}
    			finally
    			{
    				connection.Close();
    			}
    Le problème est quand tu récup le statut à priori, essaie de faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reader[C_STATUCLT].ToString()

  11. #71
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à rad_hass
    Suis d'accord avec toi, le problème doit bien provenir de la récupération du statutClient.

    Donc j'ai modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = rader.GetString(0);
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = rader["C_STATUCLT"].ToString();
    mais malheureusement cela m'affiche toujours la même erreur.

    merci d'avance!!

  12. #72
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Suis d'accord avec toi, le problème doit bien provenir de la récupération du statutClient.

    Donc j'ai modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = rader.GetString(0);
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value = rader["C_STATUCLT"].ToString();
    mais malheureusement cela m'affiche toujours la même erreur.

    merci d'avance!!
    La vérité est ailleurs ...

    Au faite je croix que ça viens plutôt de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command.Parameters.Add("@NomClt", SqlDbType.VarChar);
    mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command.Parameters.Add("@NomClt", SqlDbType.VarChar, 40);
    Le 40 tu le change par la valeur que tu as mis dans VarChar (ds ta BD t'as du faire Varchar(Taille) eh ben tu remets taille, la ou c'est jaune (le 40) ...

  13. #73
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à rad_hass
    Donc g modifié ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command.Parameters.Add("@NomClt", SqlDbType.Char, 20);
    mais j'ai toujours le même problème.
    PFFFF je vois vraiment pas pourquoi??!!

    merci d'avance

  14. #74
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Donc g modifié ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    command.Parameters.Add("@NomClt", SqlDbType.Char, 20);
    mais j'ai toujours le même problème.
    PFFFF je vois vraiment pas pourquoi??!!

    merci d'avance
    C'est char ou Varchar, attention ...

  15. #75
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    Tu peux pas procéder ainsi,
    Bien sur que si, il suffit de déclarer la variable comme suggéré par le message d'erreur.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DECLARE @numClient as int
    SET @numClient = 3

    Citation Envoyé par rad_hass Voir le message
    car tu utilise une requête avec des paramétres et non des valeurs(qui sont intérprété lors de la compilation) requête destiné à être utiliser par un programme .NET (en utilisant une particularité d'ADO.NET et non de SQL).
    Bref, si tu veux faire des tests directement dans SQL Server, il te faut mettre des valeurs ...
    Tout ceci est complètement faux

    Les paramètres SQL ne sont absolument pas gérés par le compilateur.
    C'est une fonctionnalité des bases de données (SQL Server, Oracle, etc), ce n'est en aucun cas spécifique à .NET. Et donc en déclarant les variables juste avant la requête SQL dans l'analyseur de requêtes, on peut parfaitement utiliser les paramètres SQL; ils sont d'ailleurs là pour qu'on s'en serve.

    Tu peux te documenter sur les paramètres ici : http://johannblais.developpez.com/tu...acces-donnees/

  16. #76
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Est ce que tu es absolument sûr que ton champ dans la base est bien de type VarChar et pas de type NVarChar ?
    Le paramètre doit avoir exactement le même type.

  17. #77
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à rad_hass et à SaumonAgile
    Bonjour tout le monde,

    Mon champ "C_NOMCLT" dans la base est bien de type Char. Je suis désolé je m'en suis rendu compte hier qu'il n'étais pas de type VarChar.
    Cela changent-il quelque chose dans mon code??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @nomClient AS int
    SET @nomClient = 3
    A la place de 3, je dois mettre le nom de ma combo qui correspond a cette variable??

    merci d'avance!!

  18. #78
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Je vous remez le code en espérant que vous pouriez m'éclairer même m'aider car je vois vraiment pas pourquoi je reçois le message suivant lorsque j'exécute mon application.

    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
    SqlConnection connection;
    			SqlCommand command;
    			connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI");
    			connection.Open();
    			string requete = ("SELECT C_STATUCLT FROM CLIENT WHERE CLIENT.C_NOMCLT= @NomClt");
    			command = new SqlCommand(requete,connection);
    			command.Parameters.Add("@NomClt", SqlDbType.Char, 20);
    			command.Parameters["@NomClt"].Value = NomClient;
    			SqlDataReader rader = command.ExecuteReader();
    			try
    			{
    				while (rader.Read())
    				{
    					string value = null;
    					// On part du principe que le champ à l'index 0 est de type char dans la base
    					if (rader.IsDBNull(0) == false)
    					{
    						value = rader["C_STATUCLT"].ToString();
    					}
    				}
    			}
    			catch(Exception ee)
    			{
    				MessageBox.Show(ee.Message);
    			}
    			finally
    			{
    				connection.Close();
    			}
    le message d'erreur est le suivant :
    Une exception non gérée du type 'System.InvalidCastException' s'est produite dans system.data.dll

    Informations supplémentaires*: L'objet doit implémenter IConvertible.
    merci d'avance!!

  19. #79
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Bien sur que si, il suffit de déclarer la variable comme suggéré par le message d'erreur.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DECLARE @numClient as int
    SET @numClient = 3


    Tout ceci est complètement faux

    Les paramètres SQL ne sont absolument pas gérés par le compilateur.
    C'est une fonctionnalité des bases de données (SQL Server, Oracle, etc), ce n'est en aucun cas spécifique à .NET. Et donc en déclarant les variables juste avant la requête SQL dans l'analyseur de requêtes, on peut parfaitement utiliser les paramètres SQL; ils sont d'ailleurs là pour qu'on s'en serve.

    Tu peux te documenter sur les paramètres ici : http://johannblais.developpez.com/tu...acces-donnees/
    Merci, pour les infos et heureusement que t'es la DBCommand.Parameter c'est bien de l'ADO.NET, c'est propre à .NET je me trompe pas quand je dis ça, mais tu as bien raison sur le fait qu'on peut le faire avec les declares, il faut que je revois mon niveau de SQL ...

  20. #80
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Ok mais pour mon problème, je vois vraiment pas comment faire pour le résoudre.

    Ca commence a me stresser car je perd du temps puis je vois vraiment pas comment résoudre!!

    Merci d'avance pour votre aide!!

    Cordialement
    Loic V.

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 12 PremièrePremière 12345678 ... DernièreDernière

Discussions similaires

  1. Problème d'enregistrement dans une base de données
    Par mcfly37 dans le forum Hibernate
    Réponses: 1
    Dernier message: 08/07/2010, 17h41
  2. Réponses: 3
    Dernier message: 29/03/2008, 11h36
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  4. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 18h00
  5. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 06h47

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