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 :

Problemes avec SqlCommand.ExecuteNonQuery();


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 74
    Points
    74
    Par défaut Problemes avec SqlCommand.ExecuteNonQuery();
    Bonjour,

    J'essaie tout simplement de copier des enregistrements d'une BD vers une autre. J'obtiens toujours une exception au niveau du ExecuteNonQuery() statement et je n'arrive pas à comprendre pourquoi.

    J'obtiens l'exception suivante :
    {"The parameterized query '(@a int,@b int,@c nvarchar(255),@d nvarchar(50),@e nvarchar(50),' expects the parameter '@h', which was not supplied.\r\nStatement(s) could not be prepared."}
    Pourtant, au débugger, je vois que le paramètre h est bien initialisé.

    Des suggestions?

    merci!

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;
     
    namespace Transfert1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string connectionStringSource = "Data Source=SRVSQL2;Initial Catalog=ATE_Results;Persist Security Info=True;User ID=yy;Password=xxx";
                string connectionStringDestination = "Data Source=SRVSQL2\\DEV;Initial Catalog=ATE_Results;Persist Security Info=True;User ID=yy;Password=xxx";
     
                SqlConnection connectionSource = new SqlConnection(connectionStringSource);
                SqlConnection connectionDestination = new SqlConnection(connectionStringDestination);
     
                using (connectionSource)
                {
                    SqlCommand command = new SqlCommand("SELECT * from dbo.Result;",connectionSource);
                    connectionSource.Open();
     
                    SqlDataReader reader = command.ExecuteReader();
     
     
     
                    string str = @"insert into dbo.Result(idsResult,idsATE,strConfiguration,strWorkOrder,strTestStage,lngLapPass,lngLapFail,
                                                        lngCycleCount,lngCycleFail,lngCycleFailCriteria,lngCyclePass,lngCyclePassCriteria,
                                                        lngCyclePassBegin,
                                                        lngCyclePassBeginCriteria,lngCyclePassEnd,lngCyclePassEndCriteria) 
                                                        VALUES(@a, @b, @c, @d, @e, @f, @g, @h, @i, @j, @k, @l, @m, @n,@o, @p)";
     
     
                    connectionDestination.Open();
                    SqlCommand sqlCommand = new SqlCommand(str, connectionDestination);
     
                    sqlCommand.Parameters.Add("@a", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@b", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@c", SqlDbType.NVarChar,255);
                    sqlCommand.Parameters.Add("@d", SqlDbType.NVarChar,50);
                    sqlCommand.Parameters.Add("@e", SqlDbType.NVarChar,50);
                    sqlCommand.Parameters.Add("@f", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@g", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@h", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@i", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@j", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@k", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@l", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@m", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@n", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@o", SqlDbType.Int);
                    sqlCommand.Parameters.Add("@p", SqlDbType.Int);
     
                    try
                    {
                        sqlCommand.Prepare();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
     
     
                    // Call Read before accessing data.
                    while (reader.Read())
                    {
     
                        sqlCommand.Parameters["@a"].Value = Convert.ToInt16(reader[0]);
                        sqlCommand.Parameters["@b"].Value = Convert.ToInt16(reader[1]);
                        sqlCommand.Parameters["@c"].Value = reader[2];
                        sqlCommand.Parameters["@d"].Value = reader[3];
                        sqlCommand.Parameters["@e"].Value = reader[4];
                        sqlCommand.Parameters["@f"].Value = Convert.ToInt16(reader[5]);
                        sqlCommand.Parameters["@g"].Value = Convert.ToInt16(reader[6]);
                        if (reader[7] != System.DBNull.Value)
                        {
                            sqlCommand.Parameters["@h"].Value = Convert.ToInt16(reader[7]);
                        }
                        else
                        {
                            sqlCommand.Parameters["@h"].Value = null;
                        }
     
                        sqlCommand.Parameters["@i"].Value = Convert.ToInt16(reader[8]);
                        sqlCommand.Parameters["@j"].Value = Convert.ToInt16(reader[9]);
                        sqlCommand.Parameters["@k"].Value = Convert.ToInt16(reader[10]);
                        sqlCommand.Parameters["@l"].Value = Convert.ToInt16(reader[11]);
                        sqlCommand.Parameters["@m"].Value = Convert.ToInt16(reader[12]);
                        sqlCommand.Parameters["@n"].Value = Convert.ToInt16(reader[13]);
                        sqlCommand.Parameters["@o"].Value = Convert.ToInt16(reader[14]);
                        sqlCommand.Parameters["@p"].Value = Convert.ToInt16(reader[15]);
     
                        try
                        {
                            sqlCommand.ExecuteNonQuery();
                        }
                        catch (SqlException sqlEx)
                        {
                            Console.WriteLine(sqlEx.ToString());
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.ToString());
                        }
     
                    }
     
     
                    reader.Close();
                }

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 159
    Points : 486
    Points
    486
    Par défaut
    Salut

    Essaye de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (reader[7] != System.DBNull.Value)
                        {
                            sqlCommand.Parameters["@h"].Value = Convert.ToInt16(reader[7]);
                        }
                        else
                        {
                            sqlCommand.Parameters["@h"].Value = DBNull.Value;
                        }
    Mais du coup tu fourni rien pour @h

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Accessoirement, il est complétement aberrant de passer par un programme externe à Sql Server pour passer des info d'un info d'un serveur Sql Server à un autre.

    Lier les deux serveurs et utiliser une requête cross-server qui sera exécutée sur l'un des deux serait infiniment plus cohérent (et plus facile à écrire).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 74
    Points
    74
    Par défaut
    Je suis d'accord. Ce n'est pas très élégant. Néamoins, je dois transférer tous les enregistrements d'une BD dont le schéma est inexistant et dont il n'y a pas d'intégrité référentielle vers une nouvelle avec une structure existante.

    acheo

  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 : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par acheo Voir le message
    Je suis d'accord. Ce n'est pas très élégant. Néamoins, je dois transférer tous les enregistrements d'une BD dont le schéma est inexistant et dont il n'y a pas d'intégrité référentielle vers une nouvelle avec une structure existante.
    Oui, je comprends mais en quoi le fait de faire transiter les données par un programme tiers apporte quelque chose ?

    ce que tu décrits peut parfaitement se faire via une requête unique "INSERT ... SELECT".

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 74
    Points
    74
    Par défaut
    Je n'argumente pas avec toi. Je ne suis pas DB Admin car je dois savoir mille et une chose en avionique et la DB n'est qu'accessoire. Donc si tu as une solution, explique là en clair.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into [Serveur1].[Base1].dbo.Result(liste_des_champs) select liste_des_champs from [Serveur2].[Base2].dbo.Result

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 74
    Points
    74
    Par défaut
    Je n'ai pas la visibilité des serveurs. Peut être que j'utilise le mauvais outil (Microsoft SQL Server Management Studio 10.0.1600.22 ) pour écrire ma requête?

    Lorsque j'écris une requête, je constate qu'elle est liée à une connection bien précise, cette connection étant soit sur le serveur source ou bien sur le serveur destination.

    Comment puis-je écrire la requête pour qu'elle fasse ou bien abstraction des connections ou bien que les connections soit spécifiées dans la requête?

    Merci, ton aide est bien appréciée.

    Acheo

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par acheo Voir le message
    Je n'ai pas la visibilité des serveurs. Peut être que j'utilise le mauvais outil (Microsoft SQL Server Management Studio 10.0.1600.22 ) pour écrire ma requête?

    Lorsque j'écris une requête, je constate qu'elle est liée à une connection bien précise, cette connection étant soit sur le serveur source ou bien sur le serveur destination.

    Comment puis-je écrire la requête pour qu'elle fasse ou bien abstraction des connections ou bien que les connections soit spécifiées dans la requête?

    Merci, ton aide est bien appréciée.

    Acheo
    Ce n'est pas la requête, c'est SSMS qui établit la connexion. Si ton programme sur ton poste est capable d'ouvrir la connexion, SSMS (sur le même poste avec le même compte) est capable de connecter les serveurs aussi.

    Je ne peux pas te passer de copie écran, car là je suis sur un site plutot Oracle.

    Mais, pose la question sur la partie du forum spécialisée Sql Server, tu auras une réponse sur la manip.

    J'ai modifié la requête car j'avais oublié demettre dedans les noms de base :

    la syntaxe c'est
    [Serveur].[Base].[Schema].Table (avec Schema = 'dbo' en général .... et malheureusement)

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 74
    Points
    74
    Par défaut
    Pour les noms de bases, pas de problème. C'est juste au niveau des serveurs.

    merci pour ton aide.

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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