2017-05-09 3 views
0

現在、更新または挿入後にテキストファイルに書き込む実行ファイルを実行するテーブルDEF_TESTにWriterという名前のトリガが設定されています。SQLトリガから起動したときに実行可能ファイルに書き込めません

ALTER TRIGGER [dbo].[Writer] ON [dbo].[DEF_TEST] 
AFTER INSERT, UPDATE 
AS 
BEGIN 
    BEGIN TRY 
     DECLARE @cmd as varchar(500) 
     SET @cmd = 'Path\Write_To_File.exe' 
     EXEC dbo.RunCMD @cmd 

     --Insert ok if no error are thrown 
     INSERT INTO DEF_TEST(ErrorLine, ErrorMessage) 
     VALUES('ok', 'ok') 
    END TRY 
    BEGIN CATCH 
     INSERT INTO DEF_TEST(ErrorLine, ErrorMessage) 
     VALUES(ERROR_LINE(), ERROR_MESSAGE()) 
    END CATCH 
END 

Write_To_file.exeは、本質的にこれです:

Imports System.IO 

Module Main 
    Sub Main() 
     Try 
      File.WriteAllText(".\test.txt", "test", System.Text.Encoding.UTF8) 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 
End Module 

このコードは動作しますが、私は「Write_To_File.exe」のコードを変更した場合だけ、コンソールに印刷するので、それはこのようになりますトリガーは完全に機能します。 "Write_To_File.exe"をダブルクリックして実行しようとすると、 "test.txt"を作成して書き込むことができます。しかし、トリガが "Write_To_File.exe"を起動し、 "test.txt"に書き込もうとすると、何もしません。タスクマネージャーではタスクは起動されず、トリガーからのエラーはスローされません。

"test.txt"に書き込もうとした後にコードがうまくいかないというのは、うまくいきません。たとえば、コンソールに印刷しようとすると、動作しません。

SQL Serverにフォルダ全体の完全な制御があるため、ファイルのセキュリティに問題はないとは思いません。

明らかなものがありませんか? "Writer"がトリガーするときに何が何回起こるかを見る方法はありますか?

+0

VBからエラーメッセージを受け取ろうとしてtry/catch文を追加しましたが、何も起こりません。 Visual Studioデバッガを実行するためにローカルのSQL Serverクライアントをダウンロードしようとしています。 –

+0

デフォルトで管理者として.exeを実行しようとしましたか? – Juanche

+0

はい、私はそれをローカルで実行していました。幸いにも、私は解決策を見つけました、ありがとう:) –

答えて

0

問題が見つかりました。

私は最終的に.exeをログに記録し、彼は例外を投げました。つまり、"パス 'C:\ windows \ system32 \ test.txt'へのアクセスが拒否されました。。これは、私が "。\ test.txt"に書き込もうとしていたためで、SQLサーバが実行可能ファイルではなくシステム32から.exeを実行していたので、彼は不正なファイルにテストファイルを書き込もうとしていましたパス(system32)。私は自分のプログラム(C:\ Path ..... \ test.txt)にテキストファイルの正確なパスを指定しただけで、すべて正常に動作しました。 :)

関連する問題