1

CLR が初めての SQL/VB 担当者です。基本的に、ID パラメーターを渡し、対応するデータを SQL テーブルから返す 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: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

何か案は?

4

1 に答える 1

1

Microsoft にはこれに対する回答があります。それはSqlContext.Pipe プロパティの説明に隠されています。

パイプが使用可能な場合は SqlPipe のインスタンス、パイプが使用できないコンテキスト (ユーザー定義関数など) で呼び出された場合は null です。

したがって、CLR プロシージャ内からこれを試すと、うまくいくはずです。CLR 関数内からは、そうではありません。

于 2014-06-13T11:15:32.453 に答える