How to make this CLR work with 2005?

时光毁灭记忆、已成空白 提交于 2019-11-28 12:01:24

问题


I am trying to make a clr stored procedure for a sql 2005 database that uses .net 3.5 assemblies

So first I had to change sql 2005 to recognize system.core as unsafe what I am not too happy about(I rather have had it say SAFE).

Now I get this error

 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)

Here is my code

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());

    }
};

I did not know how to pass in a datetime into it so I used a string then converted it.


回答1:


To get this to work you'd have to set it as UNSAFE.

Apparently, some TimeZoneInfo methods have HostProtectionAttribute set which means they can't be used in SQL Server CLR code.

Unless you decide "I don't care about stability and know better". I take no responsibility if your server becomes a smoking crater in the ground if you use UNSAFE...



来源:https://stackoverflow.com/questions/3209193/how-to-make-this-clr-work-with-2005

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!