none
probleme sur une serie de requete SQL RRS feed

  • Question

  • Bonjour, alors voici mon probleme je souhaite remplir différentes Tables graces a des information que l'utilisateur a rempli, donc pour ce faire je lance plusieurs requetes d'affilé, la pemiere fonctionne et se rempli normalement mais les autres non

    Voici mon code  

     Dim strSQL As String = "INSERT INTO Achat VALUES ( NEWID() ,'" & IDCU.Text & "','" & DDL_choix_de_materiel.Text & "','" & chemin_piece_jointe & "','" & justification_demande.Text & "' ) "
                        Dim cmdIns As New SqlCommand(strSQL, maConn)
                        cmdIns.ExecuteNonQuery()
                        Dim strSQL2 As String = "INSERT INTO Douchette VALUES (Achat.ID_Demande ,'" & PC_Connecte.Text & "') "
                        Dim cmdIns2 As New SqlCommand(strSQL2, maConn)
                        cmdIns2.ExecuteNonQuery()
                        Dim strSQL3 As String = "INSERT INTO demandeur VALUES ( Achat.ID_Demande ,'" & Nom.Text & "','" & Prenom.Text & "','" & Num_Telephone.Text & "','" & Uf.Text & "','" & IDCU.Text & "','" & Date_Demande.Text & "','" & IDCU.Text & "','" & Now & "') "
                        Dim cmdIns3 As New SqlCommand(strSQL3, maConn)
                        cmdIns3.ExecuteNonQuery()
                        MsgBox("la demande a bien été créer")
    Merci d'avance pour vos réponse
    jeudi 16 mai 2013 12:33

Réponses

  • Ah oui, je n'avais pas remarqué cela. Achat.ID_Demande est invalide dans les 2 requêtes suivantes.

    Il faudrait récupérer la valeur générée dans la première requête pour pouvoir injecter cette valeur dans les requêtes suivants.

    Une solution plus simple serait peut-être d'utiliser Guid.NewGuid pour générer l'id sur le client et de fournir cette valeur aux 3 requêtes.

    Essayez aussi de mettre ' dans l'un de vos champs texte et votre code va planter car il faut doubler les apostrophes pour que l'instruction SQL soit correcte. Avec des paramètres vous transmettez une date, un nombre décimal, une chaine etc... et la valeur est transmise à votre place de la façon correcte.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 16 mai 2013 18:10
    Modérateur

Toutes les réponses

  • Bonjour,

    Et il n'y a aucune erreur ? Les erreurs ne sont pas ignorées (c'est aussi possible dans VS avec le réglage adéquat) ?

    Genéralement créer soi-même le texte complet de la requête n'est pas recommandé :
    - les dates doivent respecter un format précis
    - une chaine avec un ' il faut doubler le '
    - un décimal, il faut écrire la valeur avec un . et non pas ,
    - etc...
    - sensible aux attaques par injection SQL

    Donc on préfère souvent des requêtes paramétrées : http://faqcsharp.developpez.com/?page=data_adonet#data_adonet_execparam

    Dans ce cas particulier il faudrait déjà comprendre si ces instructions sont bien exécutées (mais il se passe ensuite qq chose qui fait que l'on pense que cela ne marche pas). Ou alors elles ne sont pas exécutés et il faudrait pouvoir identifier l'erreur qui survient.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 16 mai 2013 12:57
    Modérateur
  • Ah oui il ne m'affichais pas d'erreur quand je lancais mais en mode debug il me dis  que Achat.ID_Demande   n'est pas valide . je n'ai pas trés bien compris le systeme des requête paramétrées


    jeudi 16 mai 2013 13:30
  • Ah oui, je n'avais pas remarqué cela. Achat.ID_Demande est invalide dans les 2 requêtes suivantes.

    Il faudrait récupérer la valeur générée dans la première requête pour pouvoir injecter cette valeur dans les requêtes suivants.

    Une solution plus simple serait peut-être d'utiliser Guid.NewGuid pour générer l'id sur le client et de fournir cette valeur aux 3 requêtes.

    Essayez aussi de mettre ' dans l'un de vos champs texte et votre code va planter car il faut doubler les apostrophes pour que l'instruction SQL soit correcte. Avec des paramètres vous transmettez une date, un nombre décimal, une chaine etc... et la valeur est transmise à votre place de la façon correcte.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 16 mai 2013 18:10
    Modérateur
  • Merci le Guid.NewGuid fonctionne parfaitement.

    Je pensais juste interdire tout les symboles spéciaux (si c'est possible en vb).

    J'ai encore une question, quelle sont les chances quand faisant quelque chose dans ce genre ID =  Guid.NewGuid,  ID est deux fois la meme valeur, car j'essaye de faire le moins de requête possible, mais il ne faut pas que ID est deux fois la meme valeur donc en creant une disaine par jour, est ce que le risque est suffisament grand pour mériter une nouvelle requete pour faire une recherche de doublon?

    vendredi 17 mai 2013 08:28
  • L'apostrophe est quand même bien utile en français et cela peut marcher en faisant ce qu'il faut.

    Pour le GUID, mathématiquement la probabilité n'est pas nulle, mais elle est si faible qu'en pratique on peut la considérer comme nulle (si l'algo de génération est bien fait cela revient à tirer un nombre au hasard parmi 2 puissance 128 (un nombre avec 38 zéros) possibilités différentes et à retomber plus tard une deuxième fois sur le même nombre.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 17 mai 2013 09:48
    Modérateur
  • D'accord, merci beaucoup 
    vendredi 17 mai 2013 09:57