CLR用户定义的函数参数传递

时间:2013-06-28 17:58:52

标签: sql vb.net clr

我是一个新的CLR的SQL / VB人。基本上,我想创建一个SQL函数来传递一个ID参数,并从SQL表中返回相应的数据;

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 CRFNID=@pnum", 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:未将对象引用设置为对象的实例。

任何想法?

1 个答案:

答案 0 :(得分:0)

微软有一个答案,它隐藏在SqlContext.Pipe Property的描述中:

如果管道可用,则为SqlPipe的实例;如果在管道不可用的上下文中调用,则为null(例如,在用户定义的函数中)。

因此,如果您在CLR过程中尝试此操作,它应该可以工作。在CLR功能中,它赢了。