Как заставить этот CLR работать с 2005? - PullRequest
1 голос
/ 09 июля 2010

Я пытаюсь создать хранимую процедуру clr для базы данных sql 2005, которая использует сборки .net 3.5

Итак, сначала я должен был изменить sql 2005, чтобы распознать system.core как небезопасный, что меня не очень радует (скорее, я сказал, что он БЕЗОПАСНЫЙ).

Теперь я получаю эту ошибку

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

    }
};

Я не знал, как передать в него дату и время, поэтому использовал строку и затем преобразовал ее.

1 Ответ

6 голосов
/ 09 июля 2010

Чтобы это работало, вам нужно установить его как НЕБЕЗОПАСНЫЙ.

Очевидно, что некоторые методы TimeZoneInfo имеют HostProtectionAttribute , что означает, что их нельзя использовать в SQL Server CLR.код.

Если только вы не решите: "Меня не волнует стабильность и я знаю лучше".Я не несу никакой ответственности, если ваш сервер станет дымящимся кратером в земле, если вы используете UNSAFE ...

...