私の同僚は文字列を操作するために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 ASdbo.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
'オブジェクト参照がオブジェクトのインスタンスに設定されていません.'というのは、オブジェクト変数でnullのメソッドまたはプロパティを呼び出そうとしている' .NET'コードのバグです。 'ufn_getEmailDomain'を含むクラスの定義を提供してください –
また、WHERE句が関数呼び出しの前に処理されるという保証はありません。 'NULL'か空文字列を渡すことでこのエラーを再現できますか? –
Martin、上にCLR機能を追加しました。私はヌルまたは空の文字列で関数を呼び出してみました。私はこの機能を使ってフィールドを更新するSPを持っています。時にはそれはうまく動作します。いつか、このエラーが表示されます。 – Percy