使用SQL过程替换文件中的字符串

时间:2012-10-18 09:40:41

标签: c# sql-server clr .net-assembly

我有一种方法可以从C#中为SQL Server编写的文件中删除字符串:

[SqlProcedure]
public static void fileReplace(string path, string patternToReplace, string stringForReplace)
{
    using (SqlConnection connection = new SqlConnection("context connection=true"))
    {
        connection.Open();
        try
        {
            File.WriteAllText(path, Regex.Replace(File.ReadAllText(path), patternToReplace, stringForReplace));
        }
        catch (Exception e)
        {
        }
    }
}

SQL Server中的程序集和过程是这样创建的:

CREATE ASSEMBLY FileUtils 
  FROM '<path>\<name>.dll'
  WITH PERMISSION_SET = EXTERNAL_ACCESS
GO

CREATE PROCEDURE fileReplace (
         @path             nvarchar(max)  
       , @patterToReplace  nvarchar(max)  
       , @stringForReplace nvarchar(max)  
      )
AS EXTERNAL NAME FileUtils.FileUtils.fileReplace;
GO

C#中的方法工作正常,但是当我从SQL Server调用它时,没有任何反应(文件不会更改)。怎么了?

1 个答案:

答案 0 :(得分:2)

您的SQLServer登录需要拥有该文件的权限。尝试读取/写入文件时,它可能会失败并出现异常,但是try catch

压制的异常