2013-06-28 2 views
1

저는 CLR에 새로운 SQL/VB 사용자입니다. 기본적으로 ID 매개 변수를 전달하고 SQL 테이블에서 해당 데이터를 리턴하는 SQL 함수를 작성하려고했습니다.CLR 사용자 정의 함수 매개 변수 전달

Imports System 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.SqlTypes 
Imports Microsoft.SqlServer.Server 

Partial Public Class UserDefinedFunctions 
    <Microsoft.SqlServer.Server.SqlFunction(DataAccess:= DataAccessKind.Read)> _ 
    Public Shared Function FalloutProfile(ByVal CRFNID As Integer) As SqlString 

     Using connection As New SqlConnection("context connection=true") 

      connection.Open() 
      Dim command As New SqlCommand("SELECT RATE0ORIG FROM dbo.clsgfunc WHERE [email protected]", connection) 
      command.Parameters.Add("@pnum", SqlDbType.SmallInt).Value = CRFNID 

      Dim reader As SqlDataReader 
      reader = command.ExecuteReader() 

      SqlContext.Pipe.Send(reader) 

     End Using 

    End Function 
End Class 

나는이 작업 얻을 수가 캔트 :

System.NullReferenceException : 개체의 인스턴스로 설정되지 않았습니다 Object 참조.

어떤 아이디어가 있습니까?

+0

더 많은 스택 추적을 제공 할 수 있습니까? 'NullReferenceException'가 있다는 것을 알려주는 것만으로도 리드를 제공하지 않습니다. – Mgetz

+0

그 이상을 얻으려면 충분히 익숙하지 않은 것입니다. 위의 CLR을 배포 한 후 NullReferenceException은 SQL 08 R2에서 발생합니다. 그것이 코드에서 명백한 것이었다. – redline9k

+0

'NullReferenceException '은 코드에 접근하려고 할 때 코드의 어떤 부분이 null이라는 것을 의미합니다. 로컬 디버깅을 시도 할 수 있습니까? – Mgetz

답변

0

마이크로 소프트는이 SqlContext.Pipe Property의 설명에 숨겨진이에 대한 답변이 있습니다

(예를 들어, 파이프를 사용할 수없는 컨텍스트에서 호출하는 경우 파이프가 가능한, 또는 null의 경우 SqlPipe의 인스턴스 , 사용자 정의 함수에서).

따라서 CLR 절차에서이 작업을 시도하면 작동합니다. CLR 함수 안에서는 그렇지 않습니다.

관련 문제