2012-01-17 9 views
1

このスレッドは以下のスレッド Trigger Windows Service when the new record insert in to DBCLR Trigger Support .Net 4.0は何かを私に明確にしてください。

の続きです私はDemo.Bからのコードは、すべての最初の、私は実行開始時に、私はいくつかの問題に直面しています

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 
       string Name; 
       string Location; 
       Name = (string)reader[1]; 
       Location =(string)reader[2]; 
       reader.Close(); 
       //try 
       //{ 
       // // try to pass parameter to windows service 

       // //WindowsService param = new WindowService(Name, Location); 
       // //Do something if it pass 

       //} 
       //catch (Exception ex) 
       //{ 

       //} 

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

を示唆してしまった、それは私に変更を依頼します4.0からより低いバージョン(バージョンを3.5のプロパティに変更)

私はそれがうまく動作しないと踏み込もうとすると、いつも展開が成功し、出力ウィンドウに「Canceled by User」と表示されます。後ろのシーンで何が起こっているのかは分かりません。

新しい行が挿入されたときに実行して結果を表示する方法を教えてください。

+2

をサポートしていない - それは、テーブル全体の内容を読み取ろうとし、そのテーブルからランダムに一つの行を選択し、値を割り当てますその行から 'Name'と' Location'へのカラム1と2の値を返します。たとえあなたが新しく挿入された行を読み込んでいたとしても、挿入が複数の行を生成し、トリガーが1回だけ起動されるという事実は説明していません。 –

答えて

3

いいえ、そうではありません。 .Net 4.0のSQLCLRサポートはSQL Server 2012のみで提供されますが、Visual Studioでは.NET 2.0アセンブリとしてDLLをコンパイルして展開することができます。

それ以外は、非常に悪い考えです。あなたのデータベースは、WWWからの応答を待って停止するようになります。キューイングメカニズムを使用し、SQLCLRからではなく、自分自身のプロセスからWWW呼び出しを行います。

+0

だから、皆さんがおっしゃったように、私の残りのプロジェクトは.Net 4.0上に構築されています。 – Usher

+0

そして、CLRトリガーからWindowsサービスをトリガーしようとしています – Usher

+2

私が持っている最良の提案は、あなたが私の答えをもう一度読み直すことです。 –

2

いいえ、SQL Serverの2005-2008R2がひどく破壊トリガーの.NET4アセンブリ

関連する問題