Функция CLR в SQL Server 2005 System.NullReferenceException: для ссылки на объект не задан экземпляр объекта - PullRequest
0 голосов
/ 06 февраля 2012

Мой коллега написал пакет в VB.NET для работы со строками.Меня попросили реализовать их через CLR.Пакет обращается к справочной базе данных на том же сервере, что и файл CLR CLR, развернутый для стандартизации строк.Я импортировал пакет в свой код CLR для создания функций для SQL Server.

После развертывания файла dll на сервере sql функции работают нормально, за исключением случаев, когда я получаю сообщение об ошибке

System.NullReferenceException: Object reference not set to an instance of an object.

Я должен выполнить свой запрос несколько раз, чтобы он работал.Кажется, стол заблокирован или спит.Мой запрос выглядит как

SELECT EMAIL_ADDRESS, dbo.ufn_getEmailDomain (Email_Address) AS EDOMAIN FROM CONTACT_TEMP WHERE Email_Address НЕ НЕДЕЙСТВИТЕЛЕН, а Email_Address <> ''

dbo.ufn_getEmailDomain является функцией CLR.

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

Ваш отзыв очень важен.

мои функции CLR здесь.

<Microsoft.SqlServer.Server.SqlFunction(DataAccess:=DataAccessKind.Read)> _
Public Shared Function ufn_getEmailDomainSLD(ByVal email As String) As String

    If email Is Nothing Then
        Return Nothing
    End If

    Dim de As New DataEmail(email)
    Dim dm As New DataDomain
    Dim emailDomain As String
    dm = de.Domain

    emailDomain = dm.SLD

    Return emailDomain
End Function

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Я нашел причину в конце концов.В строке подключения в коде CLR я должен установить ENLIST = FALSE, поскольку он подключается к другой базе данных.Как только я установил ENLIST = FALSE, проблема, кажется, исправлена.

0 голосов
/ 07 февраля 2012

Если я правильно понял - функция возвращает имя домена из строки электронной почты.

Попробуйте получить его таким образом (если нет строковых значений milti-mail)

SELECT 
  EMAIL_ADDRESS, 
  SUBSTRING(EMAIL_ADDRESS, CHARINDEX('@', Item)+1, 2147483647) AS EDOMAIN 
FROM CONTACT_TEMP 
WHERE Email_Address IS NOT NULL AND Email_Address<>'' 

и - найдите вашу ошибку в коде clr. Попробуйте воссоздать функцию с параметром RETURNS NULL ON NULL INPUT. Если это не поможет - тогда вам нужно проверить и очистить свой код CLR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...