PDA

View Full Version : مشكل با نوشتن trigger در ويژوال استوديو با زبان C#‎‎ و پلتفرم ASP.NET



m.mohammady.j
دوشنبه 09 مرداد 1391, 17:57 عصر
من براي يكي از جدولهايم نياز به نوشتن تريگر دارم . اسم جدولم TblPreSubmit است و مي خواهم وقتي مقدار فيلدهاي Ave و Enzebat بزرگتر از 18 باشد آنگاه مقدار فيلد Mark را true كنم.
و كد تريگرم به شكل زير است :
ALTER TRIGGER Marked
ON dbo.TblPreSubmit
after
INSERT,UPDATE
AS
begin
declare
@Mark bit,@Enzebat float ,@Ave float,
@Name varchar(20), @Family varchar(50) , @MeliCode bigint,
@SHSH bigint , @Sodor varchar(20) , @BornDate date,
@PostalCode bigint , @Pictur varchar(100),@Olympiad bit

set @Enzebat=(select Enzebat from dbo.TblPreSubmit )
set @Ave=(select Ave From dbo.TblPreSubmit)
set @Mark=(select Mark from dbo.TblPreSubmit )
set @Name=(select Name From dbo.TblPreSubmit)
set @Family=(select Family from dbo.TblPreSubmit )
set @MeliCode=(select MeliCode From dbo.TblPreSubmit)
set @SHSH=(select SHSH from dbo.TblPreSubmit )
set @Sodor=(select Sodor From dbo.TblPreSubmit)
set @BornDate=(select BornDate from dbo.TblPreSubmit )
set @PostalCode=(select PostalCode From dbo.TblPreSubmit)
--set @Picture=(select Picture from dbo.TblPreSubmit )
set @Olympiad=(select Olympiad From dbo.TblPreSubmit)
--set @Mark=(select Mark from dbo.TblPreSubmit )
if (@Enzebat>=18) and (@Ave>=18)
set @Mark='true'
else
set @Mark='false'
update dbo.TblPreSubmit set
--Name=@Name,
--Family=@Family,
--MeliCode=@MeliCode,
--SHSH=@SHSH,
--Sodor=@Sodor,
--BornDate=@BornDate,
--PostalCode=@PostalCode,
--Picture=@Pictur,
--Olympiad=@Olympiad,
--Ave=@Ave,
--Enzebat=@Enzebat,
Mark=@Mark
end

آنهايي كه دو تا – اولشان است Comment مي باشند.
وقتي تريگر را مي نويسم ذخيره اش مي كنم و آيكن آن به جدولم اضافه مي شود
اما متاسفانه پس از وارد كردن داده ها با خطاي زير مواجه مي شوم :

no rows was update
the data in row 2 not committed
و الي آخر
خواهشمندم كمك كنيد دوستان

m.mohammady.j
جمعه 27 مرداد 1391, 11:58 صبح
آقا كسي نيست كمك كنه ؟

baktash.n81@gmail.com
سه شنبه 31 مرداد 1391, 09:27 صبح
اولین مسئله اینه که Update چرا شرط نداره ... اینجوری کل جدولت Update می شه ...

همینطور وقتی از دستور Set برای مقدار دهی به متغیرها استفاده کردی اون select داخل پرانتز حتما باید یه مقدار برگردونه و گرنه error می ده ... و بهتره که همرو باهم توی یک Select بنویسی ...

Select @ID=ID,@Name=Name ... From TBL1 Where @Name='ALi'


به نظرم ... یه مقدار راجه به Trigger بیشتر سرچ کن ...

و اینکاری رو که می خوای بکنی توی کد برنامت می تونی خیلی راحتتر و درست تر انجام بدی ... همون موقع Insert یا Update ... آ Mark رو هم مقدار دهی کن ...