Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以在不使用不安全工具的情况下将信息存储在SQL Server CLR程序集中的静态变量中?_C#_Sql Server_Sqlclr - Fatal编程技术网

C# 我是否可以在不使用不安全工具的情况下将信息存储在SQL Server CLR程序集中的静态变量中?

C# 我是否可以在不使用不安全工具的情况下将信息存储在SQL Server CLR程序集中的静态变量中?,c#,sql-server,sqlclr,C#,Sql Server,Sqlclr,我有一个自然语言处理/句子标记例程,它是作为用c编写的SQLServerCLR程序集开发的。该例程需要一个使用大约20MB的训练数据开发的模型文件来进行计算,当第一次调用该函数时,我尝试将模型文件加载到一个静态字段中。但是,似乎PERMISSION\u SET=EXTERNAL\u ACCESS不允许写入静态字段。当然,使用不安全的程序集可以解决这个问题,但我的DBA根本不喜欢这个想法。每次调用函数时都加载20MB模型文件对我来说毫无意义。是否仍然可以在程序集中存储一些信息而不使用不安全的工具。

我有一个自然语言处理/句子标记例程,它是作为用c编写的SQLServerCLR程序集开发的。该例程需要一个使用大约20MB的训练数据开发的模型文件来进行计算,当第一次调用该函数时,我尝试将模型文件加载到一个静态字段中。但是,似乎PERMISSION\u SET=EXTERNAL\u ACCESS不允许写入静态字段。当然,使用不安全的程序集可以解决这个问题,但我的DBA根本不喜欢这个想法。每次调用函数时都加载20MB模型文件对我来说毫无意义。是否仍然可以在程序集中存储一些信息而不使用不安全的工具。

假设模型文件(即静态变量的值)在加载后不会更改,您应该能够将静态变量设置为只读,可以在同一类的构造函数中或在声明时进行设置

这是的MSDN页面

另一个选项是修改代码,将该数据放在集合中,然后将该集合标记为只读。一旦标记为只读,就无法重新分配集合,但仍然可以使用Add和Remove方法向集合中添加元素并从中删除元素。这将允许您将部件标记为安全的。有关更多详细信息,请参见我对另一个S.O.问题的回答:


构建一个单独的流程来处理模型文件的维护。您不需要每次都加载它。只需加载一次,并根据需要进行更新。然后你的CLR函数就可以引用你维护的表了?您是否尝试过我的建议,将变量标记为readonly?我尝试了readonly关键字,但没有成功。我们在那里坚持住了。对不起,我刚才才看到你的留言。如果您希望某人收到消息通知,则需要在消息中包含他们的@login名称。被评论的回答问题的O.P.总是会收到新评论的通知,这就是为什么即使我没有包括您的@login名称,您也会收到通知。但是,如果除了O.P.之外只有一个人对问题或答案进行评论,那么如果O.P.做出回应,它将通知该人。但一旦第二个人发表评论,它就会要求使用@login名称。HTH:-请查看我刚才对我的答案所做的更新。我建议使用一种方法来完成此工作,以便可以将组件标记为安全:-。