2010-08-28 70 views
1

我有称为prc_GetID storeProcesdure的名字,它的返回值(客户端ID)LINQ到SQL - 问题在存储过程

这里THR PROC代码:

Create PROCEDURE [dbo].[prc_GetID] (@ID VARCHAR(20)) 
AS 
SET NOCOUNT ON; 
SELECT ClientID FROM dbo.Clients WHERE [ID][email protected] 

我上面的存储过程使用的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

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

修正应用于占到多个结果(并没有考虑)

你的存储过程将返回多个记录。你想要返回第一条记录吗?如果是这样你将永远都至少有一行返回,试试这个:

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

在你需要考虑你的多条记录的现实或没有记录返回,它妥善处理。另外,不要继续从表单中进行数据访问;创建库/业务层项目以保持业务逻辑不在用户界面中是一种很好的做法。

+0

CID有只有两个属性 1的GetEnumerator 2.返回值 – Suhaibnm 2010-08-28 04:21:08

+0

的GetEnumerator足以让首先,如果你使用'System.Linq的;' – recursive 2010-08-28 04:43:44

0

你对结果集的返回值感到困惑吗?

+0

我不知道,请告诉我好的教程网站我。 Becoz我newbe到linq – Suhaibnm 2010-08-28 04:37:34