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

Accès aux données Discussion :

[sql server][c#] problème d'insertion avec deux données identiques


Sujet :

Accès aux données

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut [sql server][c#] problème d'insertion avec deux données identiques
    Bonjour,

    j'ai de nouveau un problème avec le c# et sql server.

    Jusque là j'avais un formulaire, des contrôles et un insert tout simple pour alimenter la base de données depuis ce formulaire. J'ai mis à jour ma base et voilà qu'un nouveau champ vient d'apparaître. Je modifie le code et là j'ai un message d'erreur assez étrange :

    Le nom de variable '@1' a déjà été déclaré. Les noms de variables doivent être uniques dans un lot de requêtes ou une procédure stockée.
    voici le code qui fonctionne si j'enlève l'insertion de idrole:

    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
    public void bdd(int idprofil, int idrole)
     
     
        {
                string connexion_string = @"Data Source=W260112\SQLExpress; Integrated Security=true; AttachDbFilename=D:\Profiles\super\Mes documents\Visual Studio*2005\WebSites\Admin\App_Data\intranet2.mdf; User Instance=true;";
                SqlTransaction trans=null;
                SqlConnection cx;
                cx=new SqlConnection();
     
                cx.ConnectionString=connexion_string;
     
                try
                {
                    cx.Open();
                    trans = cx.BeginTransaction();
     
                    string rq = "insert into salarie (nom,prenom,adresse1,adresse2,codepost,ville,telfixe,telport,telpro,mail,login,password,idprofil,idrole) values(@zeNom,@zePrenom,@zeAdresse,@zeAdresse2,@zeCodePost,@zeVille,@zeTelFixe,@zeTelPort,@zeTelProf,@zeMail,@zeLogin,@zePassword,'" + idprofil + "','"+idrole+"')";
     
     
                    SqlCommand sql;
                    sql = new SqlCommand(rq, cx);
     
                    //Paramétrage
     
                    sql.Parameters.Add("@zeNom", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zePrenom", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeAdresse", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeAdresse2", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeCodePost", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeVille", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeTelFixe", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeTelPort", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeTelProf", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeMail", SqlDbType.VarChar, 30);
                    sql.Parameters.Add("@zeLogin", SqlDbType.VarChar, 50);
                    sql.Parameters.Add("@zePassword", SqlDbType.VarChar, 50);
                    sql.Parameters.Add("" + idprofil + "", SqlDbType.Int);
                   sql.Parameters.Add("" + idrole + "", SqlDbType.Int);
     
                    //Valeur des paramètres
     
                    sql.Parameters["@zeNom"].Value = zeNom.Text;
                    sql.Parameters["@zePrenom"].Value = zePrenom.Text;
                    sql.Parameters["@zeAdresse"].Value = zeAdresse.Text;
                    sql.Parameters["@zeAdresse2"].Value = zeAdresse2.Text;
                    sql.Parameters["@zeCodePost"].Value = zeCodePost.Text;
                    sql.Parameters["@zeVille"].Value = zeVille.Text;
                    sql.Parameters["@zeTelFixe"].Value = zeTelFixe.Text;
                    sql.Parameters["@zeTelPort"].Value = zeTelPort.Text;
                    sql.Parameters["@zeTelProf"].Value = zeTelProf.Text;
                    sql.Parameters["@zeMail"].Value = zeMail.Text;
                    sql.Parameters["@zeLogin"].Value = zeLogin.Text;
                    sql.Parameters["@zePassword"].Value = zePassword.Text;
                    sql.Parameters["" + idprofil + ""].Value = idprofil;
                    sql.Parameters["" + idrole + ""].Value = idrole;
                    sql.Transaction = trans;
     
                    sql.ExecuteNonQuery();
     
                    SqlCommand verif = new SqlCommand("select count(idsalarie) from salarie where nom=@zeNom", cx);
     
                    verif.Parameters.Add("@zeNom", SqlDbType.VarChar, 30);
                    verif.Parameters["@zeNom"].Value = zeNom.Text;
                    verif.Transaction = trans;
     
                   int n = (int)verif.ExecuteScalar();
     
                   if (n == 1)
                   {
     
                       //  info.Text = string.Format("nombre d'utilisateur : {0} ", n);
                       trans.Commit();//validation transaction
     
                   }
                   else
                   {
                       throw new Exception("Le salarié existe déjà !!!");
     
                   }
                 }
                catch (Exception err)
                {
                    if (trans != null)
                    {
                        trans.Rollback();
                        info.Text = err.Message;
                    }
                }
                finally
                {
                    cx.Close();
                    //HttpContext.Current.Session.Add("nom", zeNom.Text);
                    //Session.Add("nom", zeNom.Text);
                    // Response.Redirect("ajousalarie2.aspx");
     
                }
     
     
        }

    Sans ajouter la dernière valeur idrole, ça fonctionne, avec idrole, ça ne amrche plus. Idrole et idprofile sont des entiers qui proviennet d'autres tables. j'ai des fonctions qui les récupèrent avant et qui les envois à ma fonction d'insertion. J'ai vérifié et idrole et idprofil contiennent bien une valeur.

    Je ne comprends pas pourquoi j'ai ce message d'erreur, je suis obligé de faire un autre fonction pour rajouter idrole...

    Edit: le problème a en fait lieu quand idrole=idprofil. Si ces deux valeurs sont égales l'insert ne fonctionne pas. Que dois-je modifier?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 77
    Points : 73
    Points
    73
    Par défaut
    salut

    essaye de changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     string rq = "insert into salarie (nom,prenom,adresse1,adresse2,codepost,ville,telfixe,telport,telpro,mail,login,password,idprofil,idrole) values(@zeNom,@zePrenom,@zeAdresse,@zeAdresse2,@zeCodePost,@zeVille,@zeTelFixe,@zeTelPort,@zeTelProf,@zeMail,@zeLogin,@zePassword,@zeidprofil ,@zeidrole)";
     
    ...
     
    sql.Parameters.Add("@zeidprofil", SqlDbType.Int);
    sql.Parameters.Add("@zeidrole", SqlDbType.Int);
     
    ...
     
    sql.Parameters["@zeidprofil"].Value = idprofil;
    sql.Parameters["@zeidrole"].Value = idrole;
    Bonne chance

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    Sinon tu peux essayer ca :
    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
     
    public bool InsertMethode(Liste des Parametres)
    {
    	bool insertion = false;
    	SqlConnection sqlConnection = new SqlConnection(_sqlConnectionString);
    	int NbModif = -1;
    	try
    	{
    		sqlConnection.Open();
    		SqlCommand sqlCmd = new SqlCommand(_NOM_DE_TA_PROC, sqlConnection);
    		sqlCmd.Parameters.Add("@zeidprofil", idprofil);
    		/*. Suite des paramètres .*/
    		sqlCmd.CommandType = CommandType.StoredProcedure;
    		NbModif = sqlCmd.ExecuteNonQuery();
    	}
    	catch (System.Exception ex)
    	{
    		Console.WriteLine(ex.ToString());
    	}
    	finally
    	{
    		sqlConnection.Close();
    		insertion = ( NbModif > 0 )?true:false;
    	}	
    	return insertion;
    }
    Bonne chance
    Notalp

Discussions similaires

  1. insert avec deux bases sql server.
    Par solitude dans le forum C#
    Réponses: 9
    Dernier message: 10/08/2010, 19h11
  2. Réponses: 3
    Dernier message: 15/09/2008, 08h32
  3. [SQL 2005] Insertion de deux données identiques dans une table
    Par skystef dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/01/2007, 22h50
  4. [SQL server 2000] Problème de jointure avec 'Case'
    Par Tankian dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 17h42
  5. Réponses: 2
    Dernier message: 16/05/2006, 10h52

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