-1

我在 C# 中为 DID 创建了一个 CLR 用户定义函数,您的意思是在我的网站上实现,并在 SQL Server 2008 中部署了 DLL。

但是读取文本文件后的字典返回空白。

以下是代码的一部分,但问题在于读取文本文件:

public Spelling()
{
        try
        {
            string fileContent = File.ReadAllText("C:/Bgtext/big.txt");
            List<string> wordList = fileContent.Split('\n').ToList();

            foreach (var word in wordList)
            {
                string trimmedWord = word.Trim().ToLower();
                if (_wordRegex.IsMatch(trimmedWord))
                {
                    if (_dictionary.ContainsKey(trimmedWord))
                        _dictionary[trimmedWord]++;
                    else
                        _dictionary.Add(trimmedWord, 1);
                }
            }
        }
        catch (Exception ex)
        {
            ex.Message.ToString();
        }

    }

    [SqlFunction(Name = "CorrectWords", DataAccess = DataAccessKind.Read)]
    public static string correctwords(string words)
    {
        string[] arr = words.Split(' ');

        for (int i = 0; i <= arr.Length - 1; i++)
        {
            arr[i] = Correct(arr[i]);
        }

        StringBuilder correctedwords = new StringBuilder();

        foreach (string value in arr)
        {
            correctedwords.Append(value);
            correctedwords.Append(' ');
        }

        return correctedwords.ToString();
    }

在将 DLL 部署到 SQL Server 之后,是否需要将我的 big.txt 文件放在任何特定位置,或者是权限问题,还是有其他方法可以读取文本文件?

4

1 回答 1

1

您是否授予数据库执行文件 I/O 的权限

这是我的一个 cls 项目(显然是我的开发机器)中的一个示例

create assembly MB from 'C:\Projects_DotNet\ABC\adlib\adlib\bin\Debug\adlib.dll'
  with permission_set = external_access

您还可以运行等效的 alter assembly 命令

要检查安全性,添加一个 hello world 存储过程,类似于

  [SqlProcedure]
  public static void hello(SqlString yousaid)
  {
    if (yousaid.IsNull)
    {
      yousaid = "Not too chatty are you " + Environment.UserDomainName + "\\" + Environment.UserName;
      SqlContext.Pipe.Send("Mercedes Benz says, '" + yousaid.ToString() + "'\n");
    }
    else
    {
      SqlContext.Pipe.Send("The CLR proc says, you said '" + yousaid.ToString() + "'\n");
    }
  }

使用“要回显的内容”调用 hello - 确保它有效,然后使用 null 调用 hello 并查看 CLR 正在运行的安全上下文。然后,您可以验证文件的 NT 权限等。

您还可以使用 SqlContext.Pipe.Send 方法作为显示调试信息的简单方法。

于 2013-08-23T02:52:23.077 回答