Linq to SQL - 存储过程中的问题

时间:2010-08-28 04:06:17

标签: linq-to-sql

我将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为什么?,

2 个答案:

答案 0 :(得分:0)

您可能应该检查CID.ClientID,而不是CID.ReturnValue。 ReturnValue是存储过程的响应代码,而不是您要查找的返回数据。如果您没有ClientID属性,则可能需要重新映射存储过程以获得应用程序可见的正确返回类型。

更正适用于多个结果的帐户(没想到)

您的存储过程将返回多条记录。你想要返回第一条记录吗?如果是这样,您将始终返回至少一行,请尝试以下方法:

txtClientID.Text = CID.First().ClientID.ToString()

实际上,您需要考虑多个记录或没有返回记录并适当地处理它。此外, please 不会继续从表单中进行数据访问;最好创建一个库/业务层项目,以保持业务逻辑不在用户界面中。

答案 1 :(得分:0)

您是否将返回值与结果集混淆?