Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : recuperer 1 variable dans un trigger (C#) [ Base de données / SQL Server ] (bootchoz)

vendredi 9 juin 2006 à 10:07:32 | recuperer 1 variable dans un trigger (C#)

bootchoz

bonjour,
je debute en c# et je n'arrive pas a recuperer la valeur d'une variable @id_pers pour l'inserer dans une table via un trigger.
voici le code de ma page .aspx

<

asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ ConnectionStrings:projetConnectionString1 %>"
InsertCommand
="INSERT INTO [personne] ([wwid_pers], [nom_pers], [id_resp]) VALUES (@wwid_pers, @nom_pers, @id_resp)"
ProviderName="<%$ ConnectionStrings:projetConnectionString1.ProviderName %>
"
SelectCommand
="SELECT personne.id_pers, [wwid_pers], [nom_pers], [id_resp] FROM [personne], [fonction], [a_com_fonc] WHERE fonction.id_fonc=a_com_fonc.id_fonc AND a_com_fonc.id_pers=personne.id_pers AND [nom_fonc]='signataire'">

voici le code généré par le trigger :
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [insert_sign] ON [dbo].[personne]
FOR INSERT
AS
DECLARE @id_pers bigint
INSERT INTO a_com_fonc
(id_pers, id_fonc) VALUES (@id_pers, 3)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 le message d'erreur qu'il me met :
Cannot insert the value NULL into column 'id_pers',...

merci de votre aide !

vendredi 9 juin 2006 à 12:48:36 | Re : recuperer 1 variable dans un trigger (C#)

crilun



crilun

pourquoi tu declares @id_pers comme un bigint???
si c'est une nouvelle variable alors il est vrai que tu ne la remplie pas donc normal qu'elle soit à NULL
par contre si ce champ appartient à ta table de depart t'as pas besoin de redeclarrer.

en regardant plus haut je vois wwid_pers comme champ, je pense que c'est  donc plutot ca que tu veux :

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ALTER TRIGGER [insert_sign] ON [dbo].[personne]
FOR INSERT
AS
--DECLARE @id_pers bigint
INSERT INTO a_com_fonc
(id_pers, id_fonc) VALUES (
wwid_pers, 3)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO





vendredi 9 juin 2006 à 15:37:17 | Re : recuperer 1 variable dans un trigger (C#)

bootchoz

en fait, 'id_pers' est la clé primaire de ma table, elle s'incremente donc automatiquement. 'wwid_pers' est un de ses attributs.
j'ai 3 tables : personne, fonction, a_com_fonc.
je voudrais recupérer l'identifiant, généré par l'insertion du nouvel enregistrement dans la table personne, pour le mettre dans la table a_com_fonc avec l'id_fonc correspondant (ici 3)

vendredi 9 juin 2006 à 17:18:40 | Re : recuperer 1 variable dans un trigger (C#)

crilun



crilun
essaye ca :
en fait tu recuperes l'id qui vient d'etre inseré avec FROM INSERTED

par contre pour ta fonction si c'est toujours 3 c'est bon,
en revanche tu ne peut pas passer de parametres a un trigger,
par consequent si tu veut le passer en parametre, plutot que de passer par une requete+trigger pour faire ton insertion passe par une procedure stockée qui te fera tout ca,
mais ca ne sera pas generé automatiquement dans tes autres applis du coup mais tu pourras toujours reutiliser ta procdure stockée

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ALTER TRIGGER [insert_sign] ON [dbo].[personne]
FOR INSERT
AS

DECLARE @id_pers bigint
SET @id_pers=(SELECT id_pers FROM INSERTED)

INSERT INTO a_com_fonc
(id_pers, id_fonc) VALUES (
@id_pers, 3)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


dimanche 11 juin 2006 à 13:44:35 | Re : recuperer 1 variable dans un trigger (C#)

bootchoz

merci, je vais essayer ça.


lundi 12 juin 2006 à 14:18:44 | Re : recuperer 1 variable dans un trigger (C#)

bootchoz

c'est encore moi !!!
j'ai modifié ma procedure :
CREATE PROCEDURE InsertSign

AS
DECLARE @id_resp bigint
DECLARE @id_pers bigint
DECLARE @id_fonc bigint
DECLARE @nom_pers varchar(50)
DECLARE @wwid_pers varchar(10)

INSERT INTO [personne] ([wwid_pers], [nom_pers], [id_resp]) VALUES
  (@wwid_pers, @nom_pers, @id_resp)

 
SET @id_pers=(SELECT id_pers FROM INSERTED)
SET @id_fonc=(SELECT id_fonc FROM fonction WHERE nom_fonc='signataire')

INSERT INTO a_com_fonc
(id_pers, id_fonc) VALUES (@id_pers, @id_fonc)
GO
et je l'appelle via ce code :

using (SqlConnection con = newSqlConnection(connectionString))

{

SqlCommand com = new SqlCommand ( "insertSign" , con);

com.CommandType = CommandType.StoredProcedure;

con.Open();

com.ExecuteNonQuery();

con.Close();

}

j'ai toujour l'erreur Cannot insert the value NULL into column 'id_resp'
et en plus Invalid object name 'INSERTED'
je ne sais plus quoi faire !!!
est-ce kil existe une methode pour le faire de facon atomique ?


lundi 12 juin 2006 à 15:42:49 | Re : recuperer 1 variable dans un trigger (C#)

crilun



crilun
normal INSERTED ne sert que pour les triggers, la requete que je t'ai filé avant es un trigger pour le mettre en procedure stockée :

INSERT INTO [personne] ([wwid_pers], [nom_pers], [id_resp]) VALUES
  (@wwid_pers, @nom_pers, @id_resp)

SET @id_pers=(SELECT MAX(id_pers) FROM PERSONNE)
SET @id_fonc=(SELECT id_fonc FROM fonction WHERE nom_fonc='signataire')

INSERT INTO a_com_fonc
(id_pers, id_fonc) VALUES (@id_pers, @id_fonc)


dans ta procédure stockée je te conseil de rajouter une transaction (c'est bien documenté et i y a des exemples dans la doc sql server, ca te permet d'effectuer plusieurs requete et de faire les mises ajour uniquement si tuoutes tes requetes ce sont bien passées sinon aucune modificatio n'es apporté)


jeudi 15 juin 2006 à 10:35:07 | Re : recuperer 1 variable dans un trigger (C#)

bootchoz

me revoilà avec mon soucis un peu different cette fois car j'ai essayé avec une procédure :

CREATE PROCEDURE InsertAdmin

 AS

BEGIN TRANSACTION

DECLARE @id_fonc bigint
DECLARE @id_pers bigint
DECLARE @wwid_pers bigint
DECLARE @nom_pers varchar(50)
DECLARE @id_chef_pers bigint


INSERT INTO [personne] ([id_pers], [wwid_pers], [nom_pers], [id_chef_pers]) VALUES ('', @wwid_pers, @nom_pers, @id_chef_pers)

SET @id_fonc=(SELECT id_fonc FROM fonction WHERE nom_fonc='administrateur')
SET @id_pers=(SELECT MAX(id_pers) FROM [personne])

INSERT INTO a_com_fonc
(id_pers, id_fonc) VALUES (@id_pers, @id_fonc)

COMMIT TRANSACTION
GO

je l'insere dans ma page.aspx comme ceci :
<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ ConnectionStrings:ConnectionString %>" InsertCommand="InsertAdmin"InsertCommandType="StoredProcedure" />

<asp:LinkButtonID="InsertButton" runat="server"CausesValidation="True"CommandName="Insert" Text="Insert">

le message d'erreur est le suivant :Procedure InsertAdmin has no parameters and arguments were supplied

j'ai essayé en les ecrivant : CREATE PROCEDURE InsertAdmin @id_pers bigint, @wwid_pers bigint, @nom_pers varchar(50), @id_chef_pers bigint
le nouveau message d'erreur est :Cannot insert explicit value for identity column in table 'personne' when IDENTITY_INSERT is set to OFF.
Violation of PRIMARY KEY constraint 'PK_a_com_fonc'. Cannot insert duplicate key in object 'a_com_fonc'.

I'm stuck, help me please... 


jeudi 15 juin 2006 à 12:29:39 | Re : recuperer 1 variable dans un trigger (C#)

crilun

Réponse acceptée !


crilun
salut,
il y a un truc qui me chagrine dans ta requete :
INSERT INTO [personne] ([id_pers], [wwid_pers], [nom_pers], [id_chef_pers]) VALUES ('', @wwid_pers, @nom_pers, @id_chef_pers)
id_pers n'est pas une clef primaire autoincrementable?
si ou dans ce cas tu ne peut pas choisir toi meme la valeur à inserer d'ou le IDENTITY_INSERT is set to OFF.
ta requete devient donc :
INSERT INTO [personne] ([wwid_pers], [nom_pers], [id_chef_pers]) VALUES (@wwid_pers, @nom_pers, @id_chef_pers)

ensuite :
Violation of PRIMARY KEY constraint 'PK_a_com_fonc'. Cannot insert duplicate key in object 'a_com_fonc'.
veut juste dire que tu as un probleme de clef primaire dans la table a_com_fonc c'est a dire que par exemple si tes clefs primaires sont id_pers et id_fonc,dans ton code tu as essayé d'inserer le meme id_pers pour la meme fonction donc il te jete puisqu'il ne peut ajouter 2 enregistrements ayant le meme doublé de clefs puisque c'est leur identifiant.

précise moi si id_pers est un autoincrementable et la relation entre personne et fonction,en gros est ce que tu geres les fonctions dans le temps c'est a dire est ce que si une personne change de fonction est ce que tu concerve son ancienne fonction avec un champ date et tu l'insere ensuite avec une nouvelle fonction ou bien est ce que tu fais simplement une mise à jour de sa fonction.
et je te dirais ou mettre les clefs sur tes tables.


vendredi 16 juin 2006 à 09:18:52 | Re : recuperer 1 variable dans un trigger (C#)

bootchoz

merci, merci, merci...
enfin ca fonctionne ! j'ai juste supprimer IDENTITY_INSERT is set to OFF
et modifier la requete comme tu l'as ecrite.
id_pers est bien auto incrementable et une personne peut avoir 1 ou plusieurs fonction associée et pour une fonction il existe une ou plusieurs personnes. d'ou la table qui contient les cles primaires id_fonc et id_pers.
encore merci


1 2

Cette discussion est classé dans : insert, id, trigger, pers, fonc


Répondre à ce message

Sujets en rapport avec ce message

retour id-auto lors d' INSERT INTO [ par bnedust ] bonjour,j'effectue un ordre INSERT INTO dans une page web.la clé primaire de la table concernée est du type numéro-auto (Acces2000).j'aurai voulu récu trigger en SQL server [ par Kurul1 ] Bonjour à tous J'ai un petit souci avec les triggers. J'ai une table zone avec un identifiant id_zone et un libelle libelle_zone. Jusque là, pas de pb Problème de trigger en SQL server [ par diabolooo ] Salut à tous,j'ai une table dans une base SQL server qui comporte 4 champs (id, date, heure, mesure)la clé primaire est composée des champs id, date, insert dans 2 tables [ par babibel122 ] je ne sais pas comment faire en asp pour lier deux tables ensemble.j'ai créer un formulaire avec 3 champs qui vont dans la table 1 et 3 champs qui von Asp.net - Sql Server : Cannot insert the value NULL into column 'id' [ par Nexto ] Bonjour,J'ai essayé de faire une page asp.net avec une simple page pour faire un ajout dans une base de donné mysql server. Pour cela j'ai utilisé une Comment faire des transaction imbriquées en ASP [ par shaft107 ] Bonjour à tous Je souhaite faire 5 insertions dans ma base de données mais vu qu'il s'agit de tables différentes comment faire des transactions en eff Récupérer l'ID après un INSERT INTO [ par audile ] Bonjour,Est-ce qu'une fonction en ASP.NET permet de récupérer l'identifiant de l'enregistrement qu'on vient d'insérer avec un INSERT INTO ?Merci d'ava set d'une var qui retourne null [ par bootchoz ] salut a vous les developpeurs !voila, j'ai un souci lors de l'appel a une procedure stockée que voici : elle retourne la valeur null pour @id_pers! Detailsview, Guid, Insert [ par dji200 ] Bonjour à tous,J'aimerais que vous m'aidiez à faire un truc simple mais visiblement non prévu par .net 2.0J'ai un detailsview, j'aimerais que l'on ins Formulaire Comment Faire pour passer en mode INSERT ? [ par ranouf ] DataSourceID="ObjectDataSource1"> Id_Utilisateu


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.