我将storeProcesdure名称称为prc_GetID,它的返回值(ClientID)
这里是proc proc代码:
Create PROCEDURE [dbo].[prc_GetID] (@ID VARCHAR(20))
AS
SET NOCOUNT ON;
SELECT ClientID FROM dbo.Clients WHERE [ID]=@ID
我使用上面的存储过程和linq到sql,这是代码,
Public Class Form2
Dim dcClients As New dcDataContext(CNString)
Private Sub btnClick_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnClick.Click
Dim CID = dcClients.prc_P(txtID.Text)
txtClientID.Text = CID.ReturnValue
End Sub
End Class
这是我的dcDataContext代码
<FunctionAttribute(Name:="prc_GetID")> _
Public Function prc_GetID(<Parameter(Name:="ID", DbType:="VarChar(20)")> _
ByVal ID As String) As ISingleResult(Of prc_GetIDResult)
Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, _
CType(MethodInfo.GetCurrentMethod,MethodInfo), ID)
Return CType(result.ReturnValue,ISingleResult(Of prc_GetIDResult))
End Function
但它的返回值0为什么?,
答案 0 :(得分:0)
您可能应该检查CID.ClientID
,而不是CID.ReturnValue
。 ReturnValue是存储过程的响应代码,而不是您要查找的返回数据。如果您没有ClientID属性,则可能需要重新映射存储过程以获得应用程序可见的正确返回类型。
更正适用于多个结果的帐户(没想到):
您的存储过程将返回多条记录。你想要返回第一条记录吗?如果是这样和,您将始终返回至少一行,请尝试以下方法:
txtClientID.Text = CID.First().ClientID.ToString()
实际上,您需要考虑多个记录或没有返回记录并适当地处理它。此外, please 不会继续从表单中进行数据访问;最好创建一个库/业务层项目,以保持业务逻辑不在用户界面中。
答案 1 :(得分:0)
您是否将返回值与结果集混淆?