2012-02-06 11 views
0

私の同僚は文字列を操作するためにVB.NETでパッケージを作成しました。私はCLRを通じてそれらを実装するように求められています。パッケージは、文字列を標準化するために配備されたCLR dllファイルと同じサーバー上の参照データベースにアクセスします。 SQL Server用の関数を作成するために、パッケージをCLRコードにインポートしました。SQL Server 2005 CLR関数System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません

私は、SQL Serverにdllファイルをデプロイした後、機能は私はそれを動作させるために私のクエリを複数回実行する必要があり、エラー

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

を取得し、時折除いて正常に動作。テーブルがロックされているか、寝ているようです。私のクエリは EMAIL_ADDRESSを選択

のようなものです、dbo.ufn_getEmailDomain(EMAIL_ADDRESS)CONTACT_TEMP EMAIL_ADDRESSがNULLではありません とEMAIL_ADDRESS <> ''

FROM EDOMAIN AS

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 
+0

'オブジェクト参照がオブジェクトのインスタンスに設定されていません.'というのは、オブジェクト変数でnullのメソッドまたはプロパティを呼び出そうとしている' .NET'コードのバグです。 'ufn_getEmailDomain'を含むクラスの定義を提供してください –

+0

また、WHERE句が関数呼び出しの前に処理されるという保証はありません。 'NULL'か空文字列を渡すことでこのエラーを再現できますか? –

+0

Martin、上にCLR機能を追加しました。私はヌルまたは空の文字列で関数を呼び出してみました。私はこの機能を使ってフィールドを更新するSPを持っています。時にはそれはうまく動作します。いつか、このエラーが表示されます。 – Percy

答えて

0

最終的にその理由がわかりました。 CLRコードの接続文字列では、別のデータベースに接続するため、ENLIST = FALSEを設定する必要があります。 ENLIST = FALSEを設定すると、問題は修正されたようです。

0

私は右の理解場合 - 機能は、電子メールの文字列からドメイン名を返します。 (miltiメールの文字列値が存在しない場合)

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コードを見直してきれいにする必要があります。

+0

今このエラーを再現することはできません。私はこの機能を数日間使用しないと、時々起こります。この関数は非常に複雑なドメインを解析するため、私の上司はそれをSQLに実装したいと考えています。 – Percy

関連する問題