17 Haziran 2013 Pazartesi

Rootlanmış Android telefonla Kies e bağlanabilirite ..


Eveet.. Her ne kadar severek kullanıyor olsam da, artık yaşlı bir telefonum var.. Sık sık yavaşlaması bu yüzden ya da seçtiğim romlardandır belki bilmiyorum ama, sık sık rom yenilemem gerekiyor.. e rom yenilemek demek backup ve restore demek.. custom rom demek kies kullanamamak demek.. hı zorunda mıyım kies e, değilim.. ama yeni bir programa kafamı yorasım gelmedi hiç.. custom romla kies e bağlanma yollarını araştırdım ve buldum.. 

1. Telefona SuperUser, BusyBox, SpoofFW programlarını yükle
2. SpoofFw programından Backup Al
3. SpoofFw programından preset seçip step2 ye bas.
4. Cihazı yeniden başlat
5. Spooffw de step3 için preset seç
6. step3 e bas
7. Kies e bağlanabiliriten hazır olmalı.. 

Videosu aşağıda..
http://www.youtube.com/watch?v=y8g-fLX1fnM

Bu da şuan kullandığım ROM:
http://forum.xda-developers.com/showthread.php?t=2001632

Notlarımda bulunsun..

14 Haziran 2013 Cuma

ASP.NET MultiThreading basit kullanımı


Bir önceki postumda paylaştığım triggerlarımda bir sorun yaşayacağımı düşünüp(daha doğrusu müdürüm tarafından düşündürülüp :) ) bu sorunu test etmek için daha önce sadece adını duyduğum multithreading programlamaya başlangıç seviyesinde, basit bir giriş yaptım. Ne işe yaradığını anladım, kullanımı konusunda ise sıkıntı yaşadığımı itiraf etmeliyim.. Hatta ne kadar sıkıldıysam bir ara küçük emraha bağlamış olacağım ki müdürüm duygusal fon müziği de vereyim mi diye yorum yapma gereği duydu saklayamadığım mimiklerime .. :)  Neyse kullandım kullanmasına ama hala kullanımı havada benim için.. 

Durumu özetledikten sonra, önce neden triggerlarımda sorun yaşayabiliritem olduğunu, sonra da bunu multitheadingle nasıl test ettiğimi açıklarım şeklinde yazı algoritmamı kurayım ve yazmaya başlayayım. :)

Triggerlarımda bir tablomda -A tablosu diyeyim- update işlemi yaparken başka bir tablomda  -B tablosu diyeyim- daha update işlemi yapan bir trigger var. Ancak B tablosunda da kendine ait bir UPDATE triggerı var. Yani A tablomun UPDATE trigger ı B tablosunun da triggerını tetikliyor,, ben ise bunu istemiyorum. Bu yüzden A tablomdaki triggerda B tablosunun triggerını DISABLE-ENABLE etme yoluna gittim.. Herşey güzel çalışıyor gibi görünüyor. Ancak; ya aynı anda iki tabloya da update işlemi gelirse, B tablosunun triggerını DISABLE ettiğim anda çalışması gerekirken çalışmazsa?

Yukarıdaki paragrafı muhtemelen sadece ben okuyunca anlarım :D Neyse zaten burda ben beneyim.. 

Sonuç olarak bunu test etmek için ne yapmalı, aynı anda iki update işlemi yapmalı. Aynı anda iki işi yapmak demek multithreading demek. O zaman basit bir multithreading projesi yapıp en kısa yoldan bunu test edelim. 

Program olabilecek en basit program. Bir butonum var, butona tıkladığımda sqle iki update işlemi gönderiyor... Kodlarım;


        protected void Button1_Click(object sender, EventArgs e)
        {


            System.Threading.ThreadStart t_baslat1;
            System.Threading.ThreadStart t_baslat2;

            System.Threading.Thread t1;
            System.Threading.Thread t2;

            t_baslat1 = new System.Threading.ThreadStart(ThreadA);
            t_baslat2 = new System.Threading.ThreadStart(ThreadB);

            t1 = new System.Threading.Thread(t_baslat1);
            t2 = new System.Threading.Thread(t_baslat2);

            t1.Start();
            t2.Start();


        }

public void ThreadA()
        {

            Harmony_v3Entities harmono = new Harmony_v3Entities();
            var asset = harmono.VDB_ASSETS.Single(p => p.GUID.Equals(new Guid("CD6577C5-9FCF-4B86-974F-D8297EF3C993"))); //grid

            asset.PRM0 = "GridMng_Transforming";
            harmono.SaveChanges();
        }


        public void ThreadB()
        {

            Harmony_v3Entities harmono = new Harmony_v3Entities();
            var info = harmono.VDB_ASSET_INFORMATIONS.Single(p => p.GUID.Equals(new Guid("B04055CC-B395-4103-9FCC-317DB2DAAE6B")));

            info.GUID_USER = Guid.NewGuid();
            harmono.SaveChanges();

        }


Bu kadar.. 
Örneği şu linkten aldım, arkadaş diğer blogların aksine çok basit ve eğlenceli anlatmış. Kendisine teşekkürü borç bilirim.. İşte linki:

İşlemin sonucunda dediğimiz gibi bir trigger çalışmama durumuyla karşılaşmadık.. Arka tarafta ne oluyor ne bitiyor, neden öyle bir sorunla karşılaşmadık bilmiyorum. Bilmek isterdim. Belki daha sonra..

Kolay gelsin bana ve cinlerime :)


INSERT, UPDATE, DELETE Trigger larıyla Samimiyet Kuruşumun Hikayesidir.. :p


Son günlerde daha önce sadece selamlaşmada kaldığım triggerlarla ilişki boyutunda tanışıp sohbet etme safhasına geçtim.. Vallahi intiba iyi..

Trigger ın türkçesi tetikleyici ve gayet de anlaşılır bir çeviri olmuş.. Tablonuza bir işlem yaparken  istediğiniz başka bir işlemi tetikletmeye yarayan sql özelliği.. Cümle içinde kullanacak olursak; atıyorum,,"ben A tabloma update çekerken B tabloma da bir insert çek." in sqlcesidir trigger... 

Sıfırdan nasıl yapılırı anlatmak gibi bir meziyetim yok maalesef.. Beceremem sanırım.. O yüzden ben yine bencil davranıp sadece kendime yarayayım; lazım olabilir düşüncesiyle yaptığım işleri yapıştırayım direkt.. Belki bu blog işi sarar da günün birinde diğer bloglarda olduğu gibi "tutorial" lar hazırlarım. Keza kendim çok faydalanıyorum o bloglardan. Allah onları yazanlardan, paylaşanlardan razı olsun :)

Asset tablomun triggerları;
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[assetPRM0UpdateTrigger]    Script Date: 14.6.2013 09:15:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:   Monolâra
-- Create date: 11.6.2013
-- Description:     Bir Asset in PRM0 ı güncelleniyorsa; INFO tablosundaki kayıtlardan PRM4ü, güncellenen assetin GUIDsine eşit olanların PRM0 ını da güncellemeye yarar.
-- =============================================
ALTER TRIGGER [dbo].[assetPRM0UpdateTrigger]
   ON  [dbo].[VDB_ASSETS]
   AFTER UPDATE
AS
BEGIN
       DECLARE @assetGUID uniqueidentifier
       DECLARE @newPRM0 nvarchar(max)
       DECLARE @oldPRM0 nvarchar(max)
       select @assetGUID = GUID, @oldPRM0 = PRM0 FROM DELETED
       select @assetGUID = GUID,  @newPRM0 = PRM0 FROM INSERTED 
       --Eğer ASSET tablosunda PRM0 alanı güncelleniyorsa başla
       IF @newPRM0 != @oldPRM0
       BEGIN
             --Eğer INFO tablosunda PRM4 ü, güncellenen asset in GUID siyle eşit olan kayıt varsa başla
             IF EXISTS(select * from VDB_ASSET_INFORMATIONS where PRM4 = @assetGUID)
             BEGIN
             ; DISABLE TRIGGER dbo.info_UpdateTrigger ON VDB_ASSET_INFORMATIONS;
                    UPDATE VDB_ASSET_INFORMATIONS SET PRM0 = @newPRM0 WHERE PRM4 = @assetGUID AND PRM1 != 0
             ; ENABLE TRIGGER dbo.info_UpdateTrigger ON VDB_ASSET_INFORMATIONS;
             END
       END
END
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[asset_UpdateTrigger]    Script Date: 14.6.2013 09:20:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:   Monolâra
-- Create date: 12.06.2013
-- Description:     Update edilen kaydın update edilmeden önceki halini yedeklemeye yarar.
--
=============================================
ALTER TRIGGER [dbo].[asset_UpdateTrigger]
   ON  [dbo].[VDB_ASSETS]
   AFTER UPDATE
AS
BEGIN
       DECLARE @assetGUID uniqueidentifier
       DECLARE
             @oldPRM0 nvarchar(max),
             @oldPRM1 smallint,
             @oldPRM2 nvarchar(max),
             @oldPRM3 nvarchar(max),
             @oldPRM4 uniqueidentifier,
             @oldPRM5 nvarchar(max),
             @oldSUBNODE smallint,
             @oldSEQUENCE_NO smallint,
             @oldGUID_SECURITY uniqueidentifier,
             @oldTIMESTAMP datetime,
             @oldGUID_USER uniqueidentifier, 
             @oldGUID_PAGE uniqueidentifier
       SELECT 
             @oldPRM0 = PRM0,
             @oldPRM1 = PRM1,
             @oldPRM2 = PRM2,
             @oldPRM3 = PRM3,
             @oldPRM4 = PRM4,
             @oldPRM5 = PRM5,
             @oldSUBNODE = SUBNODE,
             @oldSEQUENCE_NO = SEQUENCE_NO,
             @oldGUID_SECURITY = GUID_SECURITY,
             @oldTIMESTAMP = TIMESTAMP,
             @oldGUID_USER = GUID_USER,
             @oldGUID_PAGE = GUID_PAGE
       FROM DELETED
       select
             @assetGUID = GUID
       FROM INSERTED
       INSERT INTO VDB_ASSETS(GUID, GUID_PARENT, PRM0, PRM1, PRM2, PRM3, PRM4, PRM5, SUBNODE, SEQUENCE_NO, GUID_SECURITY, TIMESTAMP, GUID_USER, GUID_PAGE)
       VALUES (NEWID(), @assetGUID, @oldPRM0, 0, @oldPRM2, @oldPRM3, @oldPRM4, @oldPRM5, @oldSUBNODE, @oldSEQUENCE_NO, @oldGUID_SECURITY, @oldTIMESTAMP, @oldGUID_USER, @oldGUID_PAGE)
END
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[assetDeleteTrigger]    Script Date: 14.6.2013 09:29:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:   Monolâra
-- Create date: 11.06.2013
-- Description:     Silinen assetin ilintili olduğu diğer kayıtların da silinmesine yarar.
-- =============================================
ALTER TRIGGER [dbo].[assetDeleteTrigger]
   ON  [dbo].[VDB_ASSETS]
   AFTER DELETE
AS
BEGIN
       DECLARE @assetGUID uniqueidentifier
       select @assetGUID = GUID FROM DELETED
       --     Eğer silinen kayıtla ilgili INFO tablosunda kayıt varsa onları da sil
       IF EXISTS(select * from VDB_ASSET_INFORMATIONS where PRM4 = @assetGUID or GUID_ASSET = @assetGUID or GUID_TYPE = @assetGUID )
       BEGIN
             DELETE FROM VDB_ASSET_INFORMATIONS where PRM4 = @assetGUID or GUID_ASSET = @assetGUID or GUID_TYPE = @assetGUID
       END   
       --     Eğer silinen kayıtla ilgili RELATION tablosunda kayıt varsa onları da sil
       IF EXISTS(select * from VDB_ASSET_RELATIONS where GUID_ASSET_X = @assetGUID or GUID_ASSET_Y = @assetGUID)
       BEGIN
             DELETE FROM VDB_ASSET_RELATIONS where GUID_ASSET_X = @assetGUID or GUID_ASSET_Y = @assetGUID
       END   
END
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[subnodeManageTrigger]    Script Date: 17.6.2013 09:47:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:   Monolâra
-- Create date: 14.06.2013
-- Description:     Eğer assetin altında eleman varsa SUBNODE = 1, yoksa SUBNODE = 0 yapmaya yarar.
-- =============================================
ALTER TRIGGER [dbo].[subnodeManageTrigger]
   ON  [dbo].[VDB_ASSETS]
   AFTER UPDATE, INSERT, DELETE
AS
BEGIN
       DECLARE @assetGUID uniqueidentifier
       DECLARE @GUID_PARENT uniqueidentifier
       DECLARE @newPRM1 smallint
       select @assetGUID = GUID, @GUID_PARENT = GUID_PARENT FROM DELETED
       select @assetGUID = GUID, @GUID_PARENT = GUID_PARENT, @newPRM1 = PRM1 FROM INSERTED
       --SUBNODE kontrolü..
       --Eğer kaydın altında başka kayıt kalmadıysa subnode unu 0 yap.
       IF NOT EXISTS(SELECT * FROM VDB_ASSETS WHERE GUID_PARENT = @GUID_PARENT AND PRM1 = 1 )
       BEGIN
       ; DISABLE TRIGGER dbo.asset_UpdateTrigger ON VDB_ASSETS;
             UPDATE VDB_ASSETS SET SUBNODE=0
             WHERE GUID = @GUID_PARENT
       ; ENABLE TRIGGER dbo.asset_UpdateTrigger ON VDB_ASSETS;
       END
       --Eğer kayıt kaldıysa ve subnode u 1 yap.
       ELSE IF EXISTS(SELECT * FROM VDB_ASSETS WHERE GUID = @GUID_PARENT AND SUBNODE=0 AND PRM1 = 1 )
       BEGIN
       ; DISABLE TRIGGER dbo.asset_UpdateTrigger ON VDB_ASSETS;
             UPDATE VDB_ASSETS SET SUBNODE=1
             WHERE GUID = @GUID_PARENT AND PRM1 = 1
       ; ENABLE TRIGGER dbo.asset_UpdateTrigger ON VDB_ASSETS;
       END
END

USE [Harmony_v3]

GO

/****** Object:  Trigger [dbo].[assetVirtualDeleteManageTrigger]    Script Date: 17.6.2013 10:53:12 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:   Monolâra

-- Create date: 14.06.2013

-- Description:     Sanal olarak silinen ya da aktifleştirilen asset kaydının ilintili olduğu diğer kayıtları da sanal olarak silinip aktifleştirilmesine yarar..

-- =============================================

ALTER TRIGGER [dbo].[assetVirtualDeleteManageTrigger]

   ON  [dbo].[VDB_ASSETS]

   AFTER UPDATE

AS

BEGIN



       DECLARE @assetGUID uniqueidentifier

       DECLARE @oldPRM1 smallint

       DECLARE @newPRM1 smallint



       select @assetGUID = GUID, @oldPRM1 = PRM1 FROM DELETED

       select @assetGUID = GUID, @newPRM1 = PRM1 FROM INSERTED

      

       IF @newPRM1 = -1

       BEGIN



             --     Eğer sanal silinen kayıtla ilgili INFO tablosunda kayıt varsa onları da sanal olarak sil

             IF EXISTS(select * from VDB_ASSET_INFORMATIONS where PRM4 = @assetGUID or GUID_ASSET = @assetGUID or GUID_TYPE = @assetGUID )

             BEGIN

             ; DISABLE TRIGGER dbo.info_UpdateTrigger ON VDB_ASSET_INFORMATIONS;

            

                    UPDATE VDB_ASSET_INFORMATIONS SET PRM1 = -1

                    WHERE PRM4 = @assetGUID or GUID_ASSET = @assetGUID or GUID_TYPE = @assetGUID



             ; ENABLE TRIGGER dbo.info_UpdateTrigger ON VDB_ASSET_INFORMATIONS;



             END   



             --     Eğer sanal silinen kayıtla ilgili RELATION tablosunda kayıt varsa onları da sanal olarak sil

             IF EXISTS(select * from VDB_ASSET_RELATIONS where GUID_ASSET_X = @assetGUID or GUID_ASSET_Y = @assetGUID)

             BEGIN

             ; DISABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;



                    UPDATE VDB_ASSET_RELATIONS SET PRM1 = -1

                    WHERE GUID_ASSET_X = @assetGUID or GUID_ASSET_Y = @assetGUID

                   

             ; ENABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;



             END   



       END



       IF @newPRM1 = 1

       BEGIN



             --     Eğer aktifleştirilen kayıtla ilgili INFO tablosunda kayıt varsa onları da aktifleştir

             IF EXISTS(select * from VDB_ASSET_INFORMATIONS where PRM4 = @assetGUID or GUID_ASSET = @assetGUID or GUID_TYPE = @assetGUID )

             BEGIN

             ; DISABLE TRIGGER dbo.info_UpdateTrigger ON VDB_ASSET_INFORMATIONS;

            

                    UPDATE VDB_ASSET_INFORMATIONS SET PRM1 = 1

                    WHERE PRM4 = @assetGUID or GUID_ASSET = @assetGUID or GUID_TYPE = @assetGUID



             ; ENABLE TRIGGER dbo.info_UpdateTrigger ON VDB_ASSET_INFORMATIONS;



             END   



             --     Eğer aktifleştirilen kayıtla ilgili RELATION tablosunda kayıt varsa onları da aktifleştir

             IF EXISTS(select * from VDB_ASSET_RELATIONS where GUID_ASSET_X = @assetGUID or GUID_ASSET_Y = @assetGUID)

             BEGIN

             ; DISABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;



                    UPDATE VDB_ASSET_RELATIONS SET PRM1 = 1

                    WHERE GUID_ASSET_X = @assetGUID or GUID_ASSET_Y = @assetGUID

                   

             ; ENABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;

             END   

       END

END

İnfo Tablomun Triggerları
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[info_UpdateTrigger]    Script Date: 14.6.2013 09:52:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:   Monolâra
-- Create date: 12.06.2013
-- Description:     Update edilen kaydın update edilmeden önceki halini yedeklemeye yarar.
-- =============================================
ALTER TRIGGER [dbo].[info_UpdateTrigger]
   ON  [dbo].[VDB_ASSET_INFORMATIONS]
   AFTER UPDATE
AS
BEGIN 
       DECLARE
             @oldGUID_ASSET uniqueidentifier,
             @oldGUID_TYPE uniqueidentifier,
             @oldPRM0 nvarchar(max),
             @oldPRM1 smallint,
             @oldPRM2 nvarchar(max),
             @oldPRM3 nvarchar(max),
             @oldPRM4 uniqueidentifier,
             @oldPRM5 nvarchar(max),
             @oldSUBNODE smallint,
             @oldSEQUENCE_NO smallint,
             @oldGUID_SECURITY uniqueidentifier,
             @oldTIMESTAMP datetime,
             @oldGUID_LANGUAGE uniqueidentifier,
             @oldGUID_USER uniqueidentifier, 
             @oldGUID_PAGE uniqueidentifier
       DECLARE @infoGUID uniqueidentifier
       SELECT 
             @oldGUID_ASSET = GUID_ASSET,
             @oldGUID_TYPE = GUID_TYPE,
             @oldPRM0 = PRM0,
             @oldPRM1 = PRM1,
             @oldPRM2 = PRM2,
             @oldPRM3 = PRM3,
             @oldPRM4 = PRM4,
             @oldPRM5 = PRM5,
             @oldSUBNODE = SUBNODE,
             @oldSEQUENCE_NO = SEQUENCE_NO,
             @oldGUID_SECURITY = GUID_SECURITY,
             @oldTIMESTAMP = TIMESTAMP,
             @oldGUID_LANGUAGE = GUID_LANGUAGE,
             @oldGUID_USER = GUID_USER,
             @oldGUID_PAGE = GUID_PAGE
       FROM DELETED
       select
             @infoGUID = GUID
       FROM INSERTED
       INSERT INTO VDB_ASSET_INFORMATIONS(GUID, GUID_PARENT, GUID_ASSET, GUID_TYPE, PRM0, PRM1, PRM2, PRM3, PRM4, PRM5, SUBNODE, SEQUENCE_NO, GUID_SECURITY, TIMESTAMP, GUID_USER, GUID_LANGUAGE, GUID_PAGE)
       VALUES (NEWID(), @infoGUID, @oldGUID_ASSET, @oldGUID_TYPE, @oldPRM0, 0, @oldPRM2, @oldPRM3, @oldPRM4, @oldPRM5, @oldSUBNODE, @oldSEQUENCE_NO, @oldGUID_SECURITY, @oldTIMESTAMP, @oldGUID_USER, @oldGUID_LANGUAGE, @oldGUID_PAGE)
END

Relation tablomun triggerları
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[rel_UpdateTrigger]    Script Date: 14.6.2013 09:55:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:   Monolâra
-- Create date: 12.06.2013
-- Description:     Update edilen kaydın update edilmeden önceki halini yedeklemeye yarar.
-- =============================================
ALTER TRIGGER [dbo].[rel_UpdateTrigger]
   ON  [dbo].[VDB_ASSET_RELATIONS]
   AFTER UPDATE
AS
BEGIN
       DECLARE
             @oldGUID_ASSET_X uniqueidentifier,
             @oldGUID_RELATION_TYPE uniqueidentifier,
             @oldGUID_ASSET_Y uniqueidentifier,
             @oldPRM1 smallint,
             @oldPRM2 nvarchar(max),
             @oldPRM3 nvarchar(max),
             @oldPRM4 uniqueidentifier,
             @oldPRM5 nvarchar(max),
             @oldSUBNODE smallint,
             @oldSEQUENCE_NO smallint,
             @oldGUID_SECURITY uniqueidentifier,
             @oldTIMESTAMP datetime,
             @oldGUID_USER uniqueidentifier, 
             @oldGUID_PAGE uniqueidentifier
       DECLARE
             @newTIMESTAMP datetime
       SELECT 
             @oldGUID_ASSET_X = GUID_ASSET_X,
             @oldGUID_RELATION_TYPE = GUID_RELATION_TYPE,
             @oldGUID_ASSET_Y = GUID_ASSET_Y,
             @oldPRM1 = PRM1,
             @oldPRM2 = PRM2,
             @oldPRM3 = PRM3,
             @oldPRM4 = PRM4,
             @oldPRM5 = PRM5,
             @oldSUBNODE = SUBNODE,
             @oldSEQUENCE_NO = SEQUENCE_NO,
             @oldGUID_SECURITY = GUID_SECURITY,
             @oldTIMESTAMP = TIMESTAMP,
             @oldGUID_USER = GUID_USER,
             @oldGUID_PAGE = GUID_PAGE
       FROM DELETED
       SELECT @newTIMESTAMP = TIMESTAMP FROM INSERTED
       IF @oldTIMESTAMP != @newTIMESTAMP
       BEGIN
       INSERT INTO VDB_ASSET_RELATIONS(GUID, GUID_ASSET_X, GUID_RELATION_TYPE, GUID_ASSET_Y, PRM1, PRM2, PRM3, PRM4, PRM5, SUBNODE, SEQUENCE_NO, GUID_SECURITY, TIMESTAMP, GUID_USER, GUID_PAGE)
       VALUES (NEWID(), @oldGUID_ASSET_X, @oldGUID_RELATION_TYPE, @oldGUID_ASSET_Y, 0, @oldPRM2, @oldPRM3, @oldPRM4, @oldPRM5, @oldSUBNODE, @oldSEQUENCE_NO, @oldGUID_SECURITY, @oldTIMESTAMP, @oldGUID_USER, @oldGUID_PAGE)
       END
END
USE [Harmony_v3]
GO
/****** Object:  Trigger [dbo].[rel_subnodeManageTrigger]    Script Date: 17.6.2013 10:49:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Monolâra
-- Create date: 17.06.2013
-- Description:     Relation tablosunda SUBNODE kontrolü yapmaya yarar. Eğer altında eleman varsa SUBNODE=1, yoksa SUBNODE=0...
-- =============================================
ALTER TRIGGER [dbo].[rel_subnodeManageTrigger]
   ON  [dbo].[VDB_ASSET_RELATIONS]
   AFTER UPDATE, INSERT, DELETE
AS
BEGIN

       DECLARE @relationTypeId uniqueidentifier 
       DECLARE @X_ID uniqueidentifier
       DECLARE @newSUBNODE int
       DECLARE @newPRM1 int

       select @relationTypeId = GUID_RELATION_TYPE, @X_ID = GUID_ASSET_X FROM DELETED
       select @relationTypeId = GUID_RELATION_TYPE, @X_ID = GUID_ASSET_X, @newPRM1 = PRM1 FROM INSERTED

       IF NOT EXISTS(select * from VDB_ASSET_RELATIONS where GUID_RELATION_TYPE=@relationTypeId and PRM1 = 1 and GUID_ASSET_X = @X_ID)
       BEGIN
       ; DISABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;

             UPDATE VDB_ASSET_RELATIONS SET SUBNODE = 0 WHERE GUID_ASSET_Y = @X_ID AND GUID_RELATION_TYPE=@relationTypeId AND PRM1 = 1 AND SUBNODE = 1

       ; ENABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;
       END

       --Aktif kayıt varsa
       ELSE
       BEGIN
       ; DISABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;

             UPDATE VDB_ASSET_RELATIONS SET SUBNODE = 1 WHERE GUID_ASSET_Y = @X_ID AND GUID_RELATION_TYPE=@relationTypeId AND PRM1 = 1 AND SUBNODE = 0

       ; ENABLE TRIGGER dbo.rel_UpdateTrigger ON VDB_ASSET_RELATIONS;
       END
END


Şimdilik bu kadar.. 

Bu triggerlarla samimiyeti ilerletip nimetlerinden daha çok faydalananlar çok bloglardan gördüğüm kadarıyla.. Ben de sevdim aslında ama daha çok triggerlarla, sqllerle samimi olursam WCF sevgilim kızar,, asıl onu tanımam lazım.. :( Bilmiyorum bu ilişki nereye gider,, çünkü daha security olayını bile anlamadııım...