【问题标题】:How do I access the .NET TimeZoneInfo class from SQL Server 2005?如何从 SQL Server 2005 访问 .NET TimeZoneInfo 类?
【发布时间】:2010-10-13 05:14:30
【问题描述】:

TimeZoneInfo 类的主机保护属性为 MayLeakOnAbort。

这似乎阻止了我从 SQL Server CLR 访问它。但是有解决办法吗?

【问题讨论】:

  • OP 说他创建了新问题以更好地集中回复:stackoverflow.com/questions/614600/…。 @papillonuk 考虑改为编辑您的原始问题。
  • 嗨迈克尔/肯,是的,很抱歉老问题的厚颜无耻复活。希望我的自我回答能解释我的原因。不想过多地重新编辑上一个问题,因为这会使其他用户的 cmets 变成非推论者。这是我在这里的第一个问题,我想我吸取了教训!
  • 另一个问题是讨论这个问题的更好地方。它提供了足够详细的信息来说明为什么作者需要在 SQL Server 中使用 TZI。当前形式的这个问题的正确答案是“不要那样做。传递你需要的东西。”原始问题的答案实际上可能涉及从 SQL Server 调用 TZI。

标签: .net sql-server clr timezone


【解决方案1】:

是的,当然。您将其封装在另一个 .NET 类中,然后从 SQL Server 中的 .NET 程序集进行引用。然后,您在 SQL Server 数据库中完成禁用安全性,以便您可以运行第二个类。

如果这不起作用,您可以创建一个 COM 包装器,然后创建一个 Interop 包装器,但仍会破坏 SQL Server 中的安全性以运行该事物。

现在,如果安全性对您来说真的很重要,您可以创建一个 WCF 服务来包装您需要的位,并将其用作 SQL 代码中的服务。它有一点延迟,并且本身不能针对 SQL Server 中的对象工作,但它更干净。

很抱歉这个听起来很尖刻的答案,但我现在心情很奇怪。 :-)

【讨论】:

    【解决方案2】:

    将您的 CLR 过程部署为不安全:

    在 Visual Studio 中右键单击项目 > 属性 > 数据库选项卡 > 权限级别

    然后,要部署它,您需要配置数据库,使其接受不安全的程序集。两种选择:

    数据库所有者 (DBO) 拥有 UNSAFE ASSEMBLY 许可和 数据库拥有值得信赖的数据库 属性;

    ...或程序集已签名 有证书或非对称 具有相应登录名的密钥 带有不安全的组件 权限。

    【讨论】:

    • 尖刻评论:您没有将程序集编译为不安全,该复选框将指示部署者将其部署为不安全。不过不影响编译
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多