我是一个新的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:未将对象引用设置为对象的实例。
任何想法?
答案 0 :(得分:0)
微软有一个答案,它隐藏在SqlContext.Pipe Property的描述中:
如果管道可用,则为SqlPipe的实例;如果在管道不可用的上下文中调用,则为null(例如,在用户定义的函数中)。
因此,如果您在CLR过程中尝试此操作,它应该可以工作。在CLR功能中,它赢了。