在SQL Server同步访问静态变量SQLCLR [英] Synchronize access to static variables in sql server SQLCLR

查看:288
本文介绍了在SQL Server同步访问静态变量SQLCLR的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经写了集成在SQL Server中,提供用C#编写一些存储过程的组件。该组件具有只读静态变量保持一定的配置数据。此数据通过存储过程,其也由装配提供操纵。很显然,我必须同步访问这个静态变量。我试图用

I have written an assembly which is integrated in sql server, providing some stored procedures written in C#. The assembly has a readonly static variable holding some configuration data. This data is manipulated via stored procedures, which are also provided by the assembly. Obviously I have to synchronize access to this static variable. I tried to use

lock(someGuard)
{
    // ... access static configuration
}

我的配置类中。但后来我得到一个HostProtectionException,告诉我,该程序集具有完全信任这样做运行。 ?有没有更好的办法做到这一点。

inside my configuration class. But then I get a HostProtectionException, telling me, that the assembly has to run with full trust to do that. Is there a better way to do that?

推荐答案

有实际上是一个无证黑客:装饰类用的 编译器生成 属性。正如任何无证变通方法,里程可能会与以后版本的不同而不同。

There is actually an undocumented hack: decorate the class with the CompilerGenerated attribute. As with any undocumented workarounds, mileage may vary with future releases.

您应该不需要这虽然,如果静态是只读的,那么你可以只读声明,并装配将部署精细,只读静接受在安全组件。而且是真正只读,锁控卫也是不必要的。

You shouldn't need this though, if the static is readonly then you can declare it readonly and the assembly will deploy fine, readonly statics are accepted in SAFE assemblies. And is truly readonly, the lock guard is also unnecessary.

如果你不能只读标记,并解除锁定,这意味着不只读,您将在流沙领土。您可以阻止SQL工人和有不可预知的结果(因此不安全的要求)。该编译器生成的伎俩真的应该小心的许多使用,磺酰基,如果你完全理解的含义。你需要一个锁事实是一个强烈的信号你的代码实际上是不安全的WRT to SQL和静。

If you cannot mark it readonly and remove the lock, it means is not readonly and you will be on moving sands territory. You can block SQL workers and have unpredictable results (hence the UNSAFE requirement). The CompilerGenerated trick should really be used with a lot of care, onyl if you understand perfectly the implications. The fact that you need a lock is a strong indicator your code is actually unsafe wrt to SQL and statics.

这篇关于在SQL Server同步访问静态变量SQLCLR的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆