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 :

Requete Update ExecuteNonQuery sur serveur lié en c# [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut Requete Update ExecuteNonQuery sur serveur lié en c#
    Bonjour,

    j'ai une requete SQL qui fonctionne correctement dans SQL SERVER :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    DELETE FROM [dbo].[doc_scanne]
    GO
    INSERT INTO [dbo].[doc_scanne]
               ([NumeroBC]
               ,[NumeroDoc]
               ,[NumeroBL]
               ,[DateFact]
               ,[NumeroLigne]
               ,[TypeDoc]
               ,[RefDoc]
               ,[RefArticle]
               ,[Designation]
               ,[Famille]
               ,[CaTTC]
               ,[Qtes]
               ,[Marge]
               ,[DateBc]
               ,[DateBl]
               ,[RefArtLigne]
               ,[DesignationLigne])
    (SELECT b.VL_DLPIECEBC as NumeroBC,
      a.V_DOCNUM as NumeroDoc,
      b.VL_DLPIECEBL as NumeroBL,
      a.V_DOCDATE as DateFact,
      b.VL_DLNO as NumeroLigne,
      a.V_TYPE as TypeDoc,
      a.V_DOREF as RefDoc,
      c.ART_NUM as RefArticle,
      c.ART_LIB as Designation,
      d.FA_Intitule as Famille,
      sum(b.CATTCNet) as CaTTC,
      sum(b.QteVendues) as Qtes,
      sum(b.Marge) as Marge,
      b.VL_DLDATEBC as DateBC,
      b.VL_DATEBL as DateBL,
      e.AR_Ref as RefArtLigne,
      e.DL_Design as DesignationLigne
    FROM
      [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.DP_VENTES AS a,
      [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.DP_VENTES_LIGNES as b,
      [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.DP_ARTICLES as c,
      [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.F_FAMILLE as d,
      [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.F_DOCLIGNE as e
    WHERE
      ( a.V_DOCTYPE=b.VL_DOCTYPE  )
      AND  ( b.VL_ART_UK=c.ART_UK  )
      AND  ( d.FA_CODEFAMILLE=c.ART_FACODEFAMILLE  )
      AND  ( a.V_DOCNUMBIN=b.VL_DOCNUMBIN  )
      AND  ( d.FA_Type=0  )
      AND  ( b.VL_PK=e.CBMARQ  )
      AND  (
    	a.V_DOCNUM  =  'BCIV00002'
      )
    GROUP BY
      b.VL_DLPIECEBC, 
      a.V_DOCNUM, 
      b.VL_DLPIECEBL, 
      a.V_DOCDATE, 
      b.VL_DLNO, 
      a.V_TYPE, 
      a.V_DOREF, 
      c.ART_NUM, 
      c.ART_LIB, 
      d.FA_Intitule, 
      b.VL_DLDATEBC, 
      b.VL_DATEBL, 
      e.AR_Ref, 
      e.DL_Design)
    GO
    j'aimerais l’exécuter après clique d'un bouton en c#. j'ai donc fait une petite méthode mais j'ai l'impression d'avoir oublié un truc. j'ai essayé d'enlevé les GO pour voir, de ne pas mettre d'initial catalog ou de prendre master comme catalog mais ça n'a pas marché. Et initialement je prenais comme catalog la base de donnée dans laquelle je fait l'INSERT mais j'ai eu le même résultat :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
            public void AlimenterTableDocumentScanne(string str_NumeroDoc)
            {
                using (SqlConnection connection = new SqlConnection("Data Source=DESKTOP-30IDPHO\\SQLEXPRESS;Integrated Security=True"))
                {
                    String query = "INSERT INTO [dbo].[doc_scanne]" +
                                    "           ([NumeroBC]" +
                                    "           ,[NumeroDoc]" +
                                    "           ,[NumeroBL]" +
                                    "           ,[DateFact]" +
                                    "           ,[NumeroLigne]" +
                                    "           ,[TypeDoc]" +
                                    "           ,[RefDoc]" +
                                    "           ,[RefArticle]" +
                                    "           ,[Designation]" +
                                    "           ,[Famille]" +
                                    "           ,[CaTTC]" +
                                    "           ,[Qtes]" +
                                    "           ,[Marge]" +
                                    "           ,[DateBc]" +
                                    "           ,[DateBl]" +
                                    "           ,[RefArtLigne]" +
                                    "           ,[DesignationLigne])" +
                                    "(SELECT b.VL_DLPIECEBC as NumeroBC," +
                                    "  a.V_DOCNUM as NumeroDoc," +
                                    "  b.VL_DLPIECEBL as NumeroBL," +
                                    "  a.V_DOCDATE as DateFact," +
                                    "  b.VL_DLNO as NumeroLigne," +
                                    "  a.V_TYPE as TypeDoc," +
                                    "  a.V_DOREF as RefDoc," +
                                    "  c.ART_NUM as RefArticle," +
                                    "  c.ART_LIB as Designation," +
                                    "  d.FA_Intitule as Famille," +
                                    "  sum(b.CATTCNet) as CaTTC," +
                                    "  sum(b.QteVendues) as Qtes," +
                                    "  sum(b.Marge) as Marge," +
                                    "  b.VL_DLDATEBC as DateBC," +
                                    "  b.VL_DATEBL as DateBL," +
                                    "  e.AR_Ref as RefArtLigne," +
                                    "  e.DL_Design as DesignationLigne" +
                                    "FROM" +
                                    "  [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.DP_VENTES AS a," +
                                    "  [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.DP_VENTES_LIGNES as b," +
                                    "  [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.DP_ARTICLES as c," +
                                    "  [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.F_FAMILLE as d," +
                                    "  [NOM_SERVEUR].[TESTCOMMUNICATION1].dbo.F_DOCLIGNE as e" +
                                    "WHERE" +
                                    "  ( a.V_DOCTYPE=b.VL_DOCTYPE  )" +
                                    "  AND  ( b.VL_ART_UK=c.ART_UK  )" +
                                    "  AND  ( d.FA_CODEFAMILLE=c.ART_FACODEFAMILLE  )" +
                                    "  AND  ( a.V_DOCNUMBIN=b.VL_DOCNUMBIN  )" +
                                    "  AND  ( d.FA_Type=0  )" +
                                    "  AND  ( b.VL_PK=e.CBMARQ  )" +
                                    "  AND  (" +
                                    "	a.V_DOCNUM  =  'BICV00002'" +
                                    "  )" +
                                    "GROUP BY" +
                                    "  b.VL_DLPIECEBC, " +
                                    "  a.V_DOCNUM, " +
                                    "  b.VL_DLPIECEBL, " +
                                    "  a.V_DOCDATE, " +
                                    "  b.VL_DLNO, " +
                                    "  a.V_TYPE, " +
                                    "  a.V_DOREF, " +
                                    "  c.ART_NUM, " +
                                    "  c.ART_LIB, " +
                                    "  d.FA_Intitule, " +
                                    "  b.VL_DLDATEBC, " +
                                    "  b.VL_DATEBL, " +
                                    "  e.AR_Ref, " +
                                    "  e.DL_Design)";
     
                    using (SqlCommand command = new SqlCommand(query, connection))
                    {
     
                        connection.Open();
                        int result = command.ExecuteNonQuery();
     
                        // Check Error
                        if (result < 0)
                            Console.WriteLine("Error inserting data into Database!");
                    }
                }
            }
    Quand j'appuie sur la touche entrée pour exécuter ma méthode j'obtient : "an unhandled exception just occured. syntaxe incorrecte vers NOM_SERVEUR." je pense que ça doit venir de la manière dont je me connecte à ma base et au fait que je veux requêter mon serveur lié mais que dois-je remplacer dans mon code pour que ça marche du coup ?

    Et aussi c'est possible de mettre le mot clé GO ou faire une query avec plusieurs requêtes comme dans mon exemple ou je dois faire plusieurs query ?

    Merci à ceux qui prendront la peine de me lire et de me dépanner car je sèche un peu là.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    GO ne fonctionne pas dans un CommandText, ca marche surtout dans management studio

    plusieurs requetes dans un commandtext par contre c'est possible (donc de faire des variables ou des choses en plusieurs fois)
    s'il y a plusieurs select et que tu veux les lire il y a .nextresult() sur le sqldatareader qui permet de passer au select suivant

    concernant ton erreur c'est bien nom_serveur.nom_base.schema.table donc ca devrait fonctionner
    ce qui voudrait que dire que l'utilisateur que tu utilises ne voit pas de serveur qui aurait ce nom, soit car inexistant soit car il n'a pas les droits dessus

  3. #3
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    j'ai toujours le même message. c'est bizarre.
    Pourtant mon serveur lié apparaît dans mon management studio je l'ai crée en cochant la dernière case dans l'onglet sécurité :
    "si les connexions ne sont pas définies dans la liste ci-dessus" -> "les connexions seront effectués dans ce contexte de sécurité".
    En User et Password j'ai choisi un user SQL qui avait les droits sysadmin et setupadmin sur mon serveur local et sur mon serveur principal pour tester et qui était mappé avec la base TESTCOMMUNICATION1.

    j'ai essayé dans l'onglet sécurité des propriétés du serveur lié de faire un mappage de connexion entre le serveur local et le serveur distant en mettant le même nom d'user et le même password des deux côtés. Et en cochant ou en décochant la case Emprunter l'identité pour voir si ça changeait quelque chose et j'ai eu le même résultat.
    Quand j'ai essayé de me connecter avec ma connexion string en utilisant "Initial Catalog=TESTCOMMUNICATION1" le pc a mouliné un peu plus longtemps, puis m'a affiché un message d'erreur différent me disant que la connexion est impossible.

    Pourtant quand je me connecte en authentification windows ou avec mon login et mot de passe SQL directement via SSMS j'ai accès au serveur lié et à tout le catalogue des base de données du serveur principal et les requêtes fonctionnent.
    Je comprend pas trop pourquoi.

    Mon code modifié avec le user SQL plutôt qu'avec l'authentification Windows :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
            public void AlimenterTableDocumentScanne(string str_NumeroDoc)
            {
                //using (SqlConnection connection = new SqlConnection("Data Source=DESKTOP-30IDPHO\\SQLEXPRESS;Integrated Security=True"))
                using (SqlConnection connection = new SqlConnection("Data Source=DESKTOP-30IDPHO\\SQLEXPRESS;Initial Catalog=master;User ID=******;Password=******"))
                {
                    String query = "INSERT INTO [dbo].[doc_scanne]" +
                                    "           ([NumeroBC]" +
                                    "           ,[NumeroDoc]" +
                                    "           ,[NumeroBL]" +
                                    "           ,[DateFact]" +
                                    "           ,[NumeroLigne]" +
                                    "           ,[TypeDoc]" +
                                    "           ,[RefDoc]" +
                                    "           ,[RefArticle]" +
                                    "           ,[Designation]" +
                                    "           ,[Famille]" +
                                    "           ,[CaTTC]" +
                                    "           ,[Qtes]" +
                                    "           ,[Marge]" +
                                    "           ,[DateBc]" +
                                    "           ,[DateBl]" +
                                    "           ,[RefArtLigne]" +
                                    "           ,[DesignationLigne])" +
                                    "(SELECT b.VL_DLPIECEBC as NumeroBC," +
                                    "  a.V_DOCNUM as NumeroDoc," +
                                    "  b.VL_DLPIECEBL as NumeroBL," +
                                    "  a.V_DOCDATE as DateFact," +
                                    "  b.VL_DLNO as NumeroLigne," +
                                    "  a.V_TYPE as TypeDoc," +
                                    "  a.V_DOREF as RefDoc," +
                                    "  c.ART_NUM as RefArticle," +
                                    "  c.ART_LIB as Designation," +
                                    "  d.FA_Intitule as Famille," +
                                    "  sum(b.CATTCNet) as CaTTC," +
                                    "  sum(b.QteVendues) as Qtes," +
                                    "  sum(b.Marge) as Marge," +
                                    "  b.VL_DLDATEBC as DateBC," +
                                    "  b.VL_DATEBL as DateBL," +
                                    "  e.AR_Ref as RefArtLigne," +
                                    "  e.DL_Design as DesignationLigne" +
                                    "FROM" +
                                    "  [SERVERNB].[TESTCOMMUNICATION1].dbo.DP_VENTES AS a," +
                                    "  [SERVERNB].[TESTCOMMUNICATION1].dbo.DP_VENTES_LIGNES as b," +
                                    "  [SERVERNB].[TESTCOMMUNICATION1].dbo.DP_ARTICLES as c," +
                                    "  [SERVERNB].[TESTCOMMUNICATION1].dbo.F_FAMILLE as d," +
                                    "  [SERVERNB].[TESTCOMMUNICATION1].dbo.F_DOCLIGNE as e" +
                                    "WHERE" +
                                    "  ( a.V_DOCTYPE=b.VL_DOCTYPE  )" +
                                    "  AND  ( b.VL_ART_UK=c.ART_UK  )" +
                                    "  AND  ( d.FA_CODEFAMILLE=c.ART_FACODEFAMILLE  )" +
                                    "  AND  ( a.V_DOCNUMBIN=b.VL_DOCNUMBIN  )" +
                                    "  AND  ( d.FA_Type=0  )" +
                                    "  AND  ( b.VL_PK=e.CBMARQ  )" +
                                    "  AND  (" +
                                    "	a.V_DOCNUM  =  'BICV00002'" +
                                    "  )" +
                                    "GROUP BY" +
                                    "  b.VL_DLPIECEBC, " +
                                    "  a.V_DOCNUM, " +
                                    "  b.VL_DLPIECEBL, " +
                                    "  a.V_DOCDATE, " +
                                    "  b.VL_DLNO, " +
                                    "  a.V_TYPE, " +
                                    "  a.V_DOREF, " +
                                    "  c.ART_NUM, " +
                                    "  c.ART_LIB, " +
                                    "  d.FA_Intitule, " +
                                    "  b.VL_DLDATEBC, " +
                                    "  b.VL_DATEBL, " +
                                    "  e.AR_Ref, " +
                                    "  e.DL_Design)";
     
                    using (SqlCommand command = new SqlCommand(query, connection))
                    {
     
                        connection.Open();
                        int result = command.ExecuteNonQuery();
     
                        // Check Error
                        if (result < 0)
                            Console.WriteLine("Error inserting data into Database!");
                    }
                }
            }

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    Bon problème résolu à priori.

    j'ai fait une méthode différente dans laquelle je passe ma requête directement via un textbox et je n'ai pas eu le message d'erreur ! je pense que ça vient d'un espace manquant après transformation automatique de la requête ( j'avais fait un rechercher remplacer dans notepadd++ pour encadrer la requête avec des guillemets... )

    En stockant dans un textbox ou autre, je ne m’embête plus avec la mise entre guillemet de la requête et la concaténation des strings.
    Je pense que je vais stocké mes requêtes dans des fichier texte du coup directement, ce qui allégera le code et m'évitera les message d'erreur comme j'ai eu.

    Quelqu'un a peut être une meilleure suggestion pour le stockage des requêtes ?

    Merci

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    en effet
    " e.DL_Design as DesignationLigne" +
    "FROM" +
    " [SERVERNB].[TESTCOMMUNICATION1].dbo.DP_VENTES AS a," +
    tu n'as pas d'espace entre DesignationLigne et FROM donc ca fait

    e.DL_Design as DesignationLigneFROM [SERVERNB].[TESTCOMMUNICATION1].dbo.DP_VENTES

    DesignationLigneFROM est reconnu comme un alias, et le mot d'après (SERVERNB]) ne peut etre interprété …


    quand une requete ne passe pas, le mieux est de mettre un point d'arrêt avant l'exécution et de récupérer le contenu de commandtext via un espion express (ou pas express) et le coller dans management studio pour voir ce qui cloche

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    Oui j'étais resté bloqué sur l'histoire du serveur lié j'aurais du faire le test avant de m'arracher les cheveux...

    Et sinon pour enregistrer des requêtes qui auront juste quelques paramètres à changer, qu'est ce que je pourrais utiliser à part un fichier texte ?
    La sérialisation marche bien pour ce genre d'objet ? ou bien je stocke mes requêtes dans une table SQL (à la façon "Inception" lol).

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    tu peux les mettre où tu veux, vues, fonctions, procédures stockées, fichier texte/xml/binaire, table ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete MS-Query sur serveur sql depuis Excel
    Par Mrik117 dans le forum Développement
    Réponses: 1
    Dernier message: 29/04/2014, 17h30
  2. [AJAX] Requete AJAX lente sur serveur OVH
    Par rere02 dans le forum AJAX
    Réponses: 6
    Dernier message: 23/03/2013, 17h36
  3. Requete Update basé sur une requete select
    Par Chagui dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/11/2010, 19h34
  4. [SQL] Lancer requetes SQL périodiquement sur serveur mysql (easyphp)
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/12/2007, 12h33
  5. Probleme avec requete UPDATE sur ACCESS
    Par Chromatic dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/01/2006, 10h03

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