2013-06-28 61 views
1

我是新來CLR的SQL/VB人員。基本上,我想創建一個SQL函數來傳遞ID參數,並從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:未設置爲一個對象的實例對象引用。

有什麼想法?

+0

你能給我們更多的堆棧跟蹤嗎?只是告訴我們有一個'NullReferenceException'不會給任何潛在的領導 – Mgetz

+0

不足以得到更多。在部署上述CLR之後,NullReferenceException來自SQL 08 R2。希望這是代碼中顯而易見的東西。 – redline9k

+0

'NullReferenceException'意味着當您嘗試訪問代碼時,代碼中的內容爲空。你可以嘗試本地調試嗎? – Mgetz

回答

0

微軟有一個答案,它是隱藏在SqlContext.Pipe Property的描述:

SqlPipe的實例,如果管道是可用的,則返回null稱爲上下文,其中管不可用(例如,在用戶定義的函數中)。

所以,如果你從CLR程序中嘗試這個,它應該可以工作。從CLR功能中,它不會。