一尘不染

如何使CLR与2005一起使用?

sql

我正在尝试为使用.net 3.5程序集的sql 2005数据库创建clr存储过程

因此,首先我必须更改sql 2005,以将system.core识别为不安全的(我不太喜欢它)(我宁可说它是SAFE)。

现在我得到这个错误

 Msg 6522, Level 16, State 1, Procedure StoredProcedure1, Line 0
A .NET Framework error occurred during execution of user defined routine or aggregate 'StoredProcedure1': 
System.Security.HostProtectionException: Attempted to perform an operation that was forbidden by the CLR host.

The protected resources (only available with full trust) were: All
The demanded resources were: MayLeakOnAbort

System.Security.HostProtectionException: 
   at StoredProcedures.StoredProcedure1(String UtcDateTime)

这是我的代码

Exec StoredProcedure1 '7/8/2010 5:00:00 am'


using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;


public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void StoredProcedure1(string UtcDateTime)
    {
        SqlPipe p = SqlContext.Pipe;
        DateTime converted = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(Convert.ToDateTime(UtcDateTime), "Pacific Standard Time");

        p.Send(converted.ToString());

    }
};

我不知道如何将日期时间传递给它,所以我使用了一个字符串然后将其转换。


阅读 175

收藏
2021-03-17

共1个答案

一尘不染

要使其正常工作,您必须将其设置为UNSAFE。

显然,某些TimeZoneInfo方法具有HostProtectionAttribute设置,这意味着它们不能在SQL Server CLR代码中使用。

除非您决定“我不关心稳定性,不懂得更好”。如果您使用UNSAFE,如果您的服务器在地面上变成了一个火山口,我将不承担任何责任…

2021-03-17