|
Trouver une ressource
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)
Informations & options pour cette discussion
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#)
|
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
|
|
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|