2016-01-20 42 views
0

我有一些遺留代碼需要更新,我需要添加一個使用表值函數返回值的功能。我遇到的問題是該函數返回一個表變量。該功能是一樣的東西如下:從Visual Basic中調用表值函數6

CREATE FUNCTION [dbo].[SomeFunction](@intKey INT) 
RETURNS @t TABLE (strValue VARCHAR(20)) 
BEGIN 
    (....SOME CODE.....) 
    INSERT INTO @t (strValue) SELECT @SomeValue 
    RETURN 
END 

我打電話從VB的函數的代碼如下:

Dim objRS As New ADODB.Recordset 
Dim objCmd As New ADODB.Command 

Set objRS = New ADODB.Recordset 

With objCmd 
    .ActiveConnection = objConnection.CurrentConnection 
    .CommandType = adCmdText 
    .CommandText = "SELECT * FROM [dbo].[SomeFunction](?)" 
    .CommandTimeout = 0 
End With 

objCmd.Parameters.Append objCmd.CreateParameter("@intKey", adInteger, adParamInput) 

objCmd("@intMatterID") = someObject.Key 
Set objRs = objCmd.Execute 

If (objRs.RecordCount > 0) Then 
    someString = objRs.Fields("strValue") 
End If 

這個問題似乎是代碼的最後一塊,我已經證實,記錄集不是空的。 Fields值似乎總是NULL。

所以我假設我做這個不正確,並想知道是否有可能檢索「strValue」的值。

+0

一個Recordset沒有Recordset屬性,也許你的意思是RecordCount?我不確定你在做什麼,但是不會返回一個Recordset,它包含一行'adChapter'類型(子Recordset)字段? – Bob77

+0

@ Bob77我想從函數返回的表中獲取strValue的值。此表只會有一行,但表中的值因傳入的鍵而異。 – gestalt

回答

0

看來我遇到的問題與我如何訪問「strValue」有關。我實施了以下內容,並最終開始工作。

If (objRs.RecordCount > 0) Then 
    objRs.MoveFirst 
    someString = Cstr(objRs("strValue")) 
End If