begin process at 2010 02 10 07:35:22
  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 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' 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 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 Application Web indépendante du serveur de base de données [ par xianSheng ] Salut tout le mondeje suis nouveau , excusez moi si je ne pose pas ma question là ou il le faut.J'ai une application .net en visual studio 2008 qui ut


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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,437 sec (3)

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