begin process at 2010 09 09 10:39:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Débutant(s)

 > 

Eviter redondance des données pendant un INSERT


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Eviter redondance des données pendant un INSERT

vendredi 29 août 2008 à 11:04:00 | Eviter redondance des données pendant un INSERT

issousam

Bonjour,

je voudrais savoir comment eviter la redondance de données dans ma table lors d'INSERT.
J'ai essayé en definissant une contrainte d'unicité UNIQUE sur le champ mais le problème est que dés qu'il veut inserer une données qui existe déjà -> il ne le fait pas (jusque là TOUT VA BIEN) mais le problème est qu'il arrete l'instruction et donc arrete d'inserer la suite des données.

Voila le code :

if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[LOGICIEL]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 BEGIN
CREATE TABLE [dbo].[LOGICIEL] (
 [id_logiciel] [int] IDENTITY (1, 1) NOT NULL ,
 [nom_logiciel] [text] NOT NULL UNIQUE,
 [is_os] [text] NOT NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END

GO

ALTER TABLE [dbo].[LOGICIEL] WITH NOCHECK ADD
 CONSTRAINT [PK_LOGICIEL] PRIMARY KEY  CLUSTERED
 (
  [id_logiciel]
 )  ON [PRIMARY]


et le code permettant de me connecter à la base de données (fichier .cs)

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectString"].ToString())) { 
      SqlCommand cmd; string maRequete;
      maRequete = "INSERT INTO dbo.LOGICIEL(nom_logiciel,is_os) VALUES (@BDD_newL,'"+BDD_os+"')";
      cmd = new SqlCommand(maRequete,cn);
      cmd.Parameters.Add(new SqlParameter("@BDD_newL", SqlDbType.VarChar, 512));
      cmd.Parameters["@BDD_newL"].Value = BDD_newL;
      cn.Open();
      SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}


Voila !!!

L'erreur que j'obtiens est : Violation de la contrainte UNIQUE KEY 'UQ_LOGICIEL_4119A21D' Impossible d'inserer une cle en double dans l'objet 'dbo.LOGICIEL'.
L'instruction a été arrété

SI vous avez une idée, Merci de me repondre !!!


dimanche 31 août 2008 à 22:20:20 | Re : Eviter redondance des données pendant un INSERT

nhervagault

Administrateur CodeS-SourceS
Salut,

Il faut utiliser un bloc try catch  autour de ton insertion.

Et dans le catch, tu geres ton cas d'erreur, log fichier, log IHM autre corrections des donnees (pour supprimer l'unicité)

Voila
mercredi 3 septembre 2008 à 14:43:55 | Re : Eviter redondance des données pendant un INSERT

issousam

merci de ta reponse,

On m'en a parlé... mais etant nouveau en programmation et SQL je voudrais savoir si tu pouvais me donner un petit exemple de cette facon de faire:

Ma fonction de connexion est de la forme :

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectString"].ToString())) { 
            SqlCommand cmd; string maRequete; maRequete = "INSERT INTO dbo.LOGICIEL(nom_logiciel,is_os) VALUES (@BDD_newL,'"+BDD_os+"')";
             cmd = new SqlCommand(maRequete,cn);
            cmd.Parameters.Add(new SqlParameter("@BDD_newL", SqlDbType.VarChar, 512));
            cmd.Parameters["@BDD_newL"].Value = BDD_newL;
            cn.Open();
            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}

MAis je vois pas où mettre le try catch

Je pensais à mettre le try avant le INSERT mais je ne sais pas quoi mettre dans le catch

Desolé de poser des questions comme ça mais j'apprends...

MERCI d 'avance

mercredi 3 septembre 2008 à 15:14:10 | Re : Eviter redondance des données pendant un INSERT

nhervagault

Administrateur CodeS-SourceS
Voici une proposition non testée

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectString"].
ConnectionString ))

            SqlCommand cmd; string maRequete; maRequete = "INSERT INTO dbo.LOGICIEL(nom_logiciel,is_os) VALUES (@BDD_newL,@
BDD_o )";

             cmd = new SqlCommand(maRequete,cn);
            cmd.Parameters.Add(new SqlParameter("@BDD_newL", SqlDbType.VarChar, 512));
            cmd.Parameters["@BDD_newL"].Value = BDD_newL;
            cmd.Parameters[" @BDD_o "].Value = BDD_o ;
             try{
            cn.Open();

long lastID = Convert.ToInt64(cmd.ExecuteScalar()); --> Renvoie l'id inserer - exemple insertion
ou
           cmd.ExecuteNonQuery(); --> Execution exemple suppression et mise a jour
}
catch{Exception e)
{
---> Traitement de l'erreur exemple cle en double ....
}
finally
{
if (cmd != null)
  {cmd.CloseConnection();}

}
}


Cette discussion est classée dans : données, logiciel, id, cmd, dbo


Répondre à ce message

Sujets en rapport avec ce message

DEFINIR UNE CONTRAINTE D'UNICITE [ par issousam ] Bonjour,Je m'adresse à vous car je debute en langage SQL et j'ai un probleme au niveau des contarintes d'unicité que je veux definir au sein des table MySQL à distance -> Logiciel/serveur [ par Bixome ] Bonsoir, J'ai rencontrer un problème quand j'ai voulu utiliser la BDD de mon hébergeur (1&1) pour récupérer des données d'une application que je dével Inserer des données [ par JALEO WAHRANI ] Bonjour à tous,je souhaiterais inserer des données dans 2 tables à la fois.On a d'un côté la table     t_personnes(id, nom, prenom, no_insee)et de l'a Transfert de data et DB2 [ par jsmikwen ] Bonjour, Je suis entrain de chercher un logiciel de transfert / intégration de données capable d'aider avec DB2. Nous avons eu des conseils mais n' Transfert données et solution logiciel [ par jsmikwen ] Bonjour, Nous avons besoin de transférer des données et des contacts sur une base MySQL. J'ai recu des conseils et cherche une solution logicielle. Requête tri par date [ par coyote_fx ] Bonjour à tous,voilà je dois composer une requête dynamique de recherche sur une table de ma base de données (COMMANDES):Exemple de syntaxe de ma requ Ob de requete avec IN [ par boninou ] Bonjour à tous,Voila mon probleme : je souhatiterai effacer de ma base de données tous les paniers qui n'ont pas été validés par les clients.Voila ma MySQL peu performant? [ par PatBlarg ] Bonjour, j'ai installé récemment MySQL sur mon ordinateur pour faire du développement de logiciel. Mon logiciel doit absolument fonctionné avec des ba extraire des données depuis la base de donnée Mysql [ par reseau210 ] salut à tous,en fait je travaille avec eclipse et la bd mysql, mon problème est que je n'arrive pas à extraire des données à partir de la base de donn Probleme export de données sql vers excel [ par tshikas ] Bonjour, voila j arrive pas a executer mon code, Ma connexion fonctionne mais c est au moment d'importer les données pour les enregistrer . Ca me donn


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales