2012-01-16 13 views
7

करने के लिए सम्मिलित करें:
Change Notification with Sql Server 2008उत्प्रेरक Windows सेवा जब नया रिकार्ड संभव डुप्लिकेट डीबी

Am बस सोच रहा है वैसे भी मैं सी # में एक खिड़कियों सेवा है कि ट्रिगर हो जाएगा लिख ​​सकते हैं जब नया रिकॉर्ड डेटाबेस में डाला जाता है।

और मैं डीबी के माध्यम से डीबी को भी कनेक्ट करना चाहता हूं। कृपया कोई विचार या सुझाव दें।

अग्रिम में धन्यवाद।

डेमो.बी निर्देश के आधार पर, यहां कोड है।

एसक्यूएल डाटाबेस विवरण


मेरे डेटाबेस नाम: MyWeb, टेबल का नाम: StoryItems, कॉलम: स्थान, शीर्षक, नाम, शैली।


public partial class Triggers 
{ 
    // Enter existing table or view for the target and uncomment the attribute line 
    [Microsoft.SqlServer.Server.SqlTrigger(Name = "Trigger_Web", Target = "StoryItems", Event = "FOR INSERT")] 
    public static void Trigger_Web() 
    { 

    SqlCommand command; 
    SqlTriggerContext triggerContext = SqlContext.TriggerContext; 
    SqlPipe pipe = SqlContext.Pipe; 
    SqlDataReader reader; 

    if (triggerContext.TriggerAction == TriggerAction.Insert) 
    { 
     using (SqlConnection connection = new SqlConnection(@"context connection=true")) 
     { 
      connection.Open(); 
      command = new SqlCommand(@"SELECT * FROM StoryItems", connection); 
      reader = command.ExecuteReader(); 
      reader.Read(); 

      // get inserted value 
      // ***********Here am trying to retrieve the location and name column value    
      Location= (string)reader[9]; 
      Name= (String) reader[9]; 
      reader.Close(); 
      try 
      { 
       // try to pass parameter to windows service 

       WindowsService param = new WindowService(InsertedValue1, InsertedValue2); 
      } 
      catch (Exception ex) 
      { 

      } 



     // Replace with your own code 
     SqlContext.Pipe.Send("Trigger FIRED"); 
     } 
    } 
} 
} 

कुछ कैसे यह स्तंभ नाम पसंद नहीं करता है, यकीन है कि यहाँ क्या याद आ रही है नहीं कर रहा हूँ। "Trigger_Web" मेरे CLR सपा नाम है।

उत्तर

3

सबसे पहले आप दृश्य स्टूडियो में एक ट्रिगर आवेदन बनाना होगा।

फ़ाइल -> नया -> प्रोजेक्ट -> डेटाबेस -> विजुअल सी # सीएलआर डेटाबेस प्रोजेक्ट का चयन करें।

यह आपको किसी डेटाबेस से कनेक्ट करने के लिए संकेत देगा। एक बार हो जाने पर, सुनिश्चित करें कि आपका ट्रिगर एप्लिकेशन आपको पसंद की किसी भी तालिका पर रिकॉर्ड सम्मिलन सुनता है (आप दृश्य स्टूडियो here में सीएलआर ऐप के बारे में अधिक पढ़ सकते हैं)।

ऊपर दिए गए लिंक में चरणों से, एक ट्रिगर जोड़ें।

[Microsoft.SqlServer.Server.SqlTrigger(Name = "GetTransaction", Target = "EvnLog", Event = "FOR INSERT")] 
public static void GetTransaction() 
{ 
    SqlCommand command; 
    SqlTriggerContext triggerContext = SqlContext.TriggerContext; 
    SqlPipe pipe = SqlContext.Pipe; 
    SqlDataReader reader; 

    if (triggerContext.TriggerAction == TriggerAction.Insert) 
    { 
     using (SqlConnection connection = new SqlConnection(@"context connection=true")) 
     { 
      connection.Open(); 
      command = new SqlCommand(@"SELECT * FROM INSERTED", connection); 
      reader = command.ExecuteReader(); 
      reader.Read(); 
      // get inserted value 
      InsertedValue1 = (DateTime)reader[0]; 
      InsertedValue2 = (string)reader[9]; 
      reader.Close(); 
      try 
      { 
       // try to pass parameter to windows service 

       WindowsService param = new WindowService(InsertedValue1,InsertedValue2) 
      } 
      catch (Exception ex) 
      { 

      } 

     } 

नोट:: GetTransaction ट्रिगर आप बनाना चाहते हैं का नाम है, इस मामले में Evnlog है

+1

मुझे खुशी है कि तुम क्या दिखाया है तालिका के नाम एक है अपने विधि इस तरह दिखना चाहिए उदाहरण (जो समस्या को हल करता है), लेकिन ... मुझे कल्पना है कि अगर आपको केवल एक मूल्य मिल रहा है तो यह 'शीर्ष 1 * चुनें' अन्यथा SQL सर्वर परिणाम स्पूल जारी रख सकता है। और 'पाठक' होना चाहिए 'डिस्प्ले', न कि 'क्लोज़' किया। –

+0

धन्यवाद बहुत डेमो.बी, क्या होगा मेरी विंडोज सेवा दूरस्थ स्थान पर चल रही है या मेरे एसक्यूएल सर्वर दूरस्थ स्थान पर चल रहा है। उस स्थिति में, डब्ल्यूसीएफ या किसी भी सेवा संचार और ट्रिगर करने का एकमात्र विकल्प है, कृपया मुझे सही करें गलत। – Usher

+0

जब मैं एक नई परियोजना बनाने की कोशिश करता हूं तो मुझे काफी दिलचस्प चेतावनी मिली "नोट: यदि आपके पास आपके विकास कंप्यूटर पर स्थापित नेट फ्रेमवर्क संस्करण 3.5 नहीं है, तो आपको इसे स्थापित करना होगा यदि आप एसक्यूएल सर्वर 2005 के लिए एसक्यूएल सीएलआर असेंबली विकसित करना चाहते हैं या एसक्यूएल सर्वर 2008 उन असेंबली का समर्थन करता है जो .NET Framework के 2.0,3.0 या 3.5 संस्करण को लक्षित करते हैं। आप प्रोजेक्ट गुणों में .Net Framework संस्करण निर्दिष्ट करते हैं। अधिक जानकारी के लिए F1 दबाएं। " – Usher

0

SQL सर्वर में विस्तारित संग्रहीत प्रक्रिया की तरह कुछ उपयोग करें, जो आपके सी # वर्ग/निष्पादन योग्य को कॉल करता है, जो तब सेवा निष्पादित कर सकता है।

आप तालिका पर on_insert ईवेंट पर ट्रिगर्स से कमांड लाइन फ़ंक्शंस भी कॉल कर सकते हैं, जो किसी सेवा को प्रारंभ/बंद कर सकता है या एक्सई या बैच फ़ाइल चला सकता है।

कुछ विचार: http://www.sqlservercentral.com/Forums/Topic960855-392-1.aspx

और http://msdn.microsoft.com/en-us/library/ms189799.aspx

संबंधित मुद्दे