none
SQL CLRでファイルの存在チェックをおこないたいのですが。 RRS feed

  • 質問

  • SQL CLRでファイルの存在チェックを行おうと思い、下記のソースを書きましたが、ファイルがあるにもかかわらずFlaseが返されます。

    問題点があれば教えてください。

                If System.IO.File.Exists("C:\Temp\test.txt") = False Then

                    SqlContext.Pipe.Send("No File " & System.DateTime.Now.ToString() + "\n")

                End If

    開発環境

    OS:Windows Vista Business

    Visual Studio2010 VB.net

    SQL Server2008 Developer Edition

    よろしくお願いします。

    2011年11月22日 14:59

回答

  • ファイル名の指定方法は既に書かれているので置いといて、

    SQL CLR からファイルシステムにアクセスするためには、権限レベルをデフォルトの SAFE から EXTERNAL まで昇格しないとアクセスできなかったと思います。

    EXTERNAL や UNSAFE のアクセス権限を設定する場合、SQL Server にて証明書を発行し、その証明書でアセンブリを署名しておかなければなりません。詳しくは、

    SQL CLR: アセンブリの作成
    http://msdn.microsoft.com/ja-jp/library/ms345106.aspx

    あたりをどうぞ。

    2011年11月23日 0:02

すべての返信

  •             If System.IO.File.Exists("C:\Temp\test.txt") = False Then

    If System.IO.File.Exists(@"C:\Temp\test.txt") = False Then
    

    または、

    If System.IO.File.Exists("C:\\Temp\\test.txt") = False Then
    

    で試してみてください。


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    2011年11月22日 20:59
  • ファイル名の指定方法は既に書かれているので置いといて、

    SQL CLR からファイルシステムにアクセスするためには、権限レベルをデフォルトの SAFE から EXTERNAL まで昇格しないとアクセスできなかったと思います。

    EXTERNAL や UNSAFE のアクセス権限を設定する場合、SQL Server にて証明書を発行し、その証明書でアセンブリを署名しておかなければなりません。詳しくは、

    SQL CLR: アセンブリの作成
    http://msdn.microsoft.com/ja-jp/library/ms345106.aspx

    あたりをどうぞ。

    2011年11月23日 0:02
  • 質問者もそうですが、VB でエスケープシーケンスを使っている点が気になります。
    If-Then とか、& 演算子とか、VB の特徴が見えますし、よく見ると本文にも書いてあります。

    VB.NET であれば、J.Hashimoto さんが提示されているようなファイルパスに \\ と重ねるとか、文字列の前に @ をつけるとかは、必要ありません。
    質問者である どんぐりころころさんも "\n" では改行になりませんが、問題ないですか?


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年11月23日 2:27
  • K.Takaokaさま

    ご回答いただきありがとうございます。

    「SQL CLR: アセンブリの作成」を参考にして調べた上で、下記のように設定したところ動作しました。

    データベースのプロパティにて「信頼可能」をTrueに設定。ただしこれは、画面ではできないのでコマンドにて行う。

     ALTER DATABASE データベース名 SET TRUSTWORTHY ON

    次に、VisualStudioのプロジェクトのプロパティで「アクセス許可のレベル」を外部に設定。

    以上の方法で、解決しました。 今後ともよろしくお願いします。

    J.Hashimotoさま Azuleanさま

    ご回答ありがとうございます。参考にさせていただきます。 今後ともよろしくお願いします。

    2011年11月23日 6:33
  • C#と早合点して回答してしまいました。失礼しました。
    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    2011年11月23日 7:00