2010-07-22 57 views
0

我是LINQ的新手,並且遇到了一個簡單的(工作)存儲過程沒有參數並返回單個Integer 。當調用存儲過程這與LINQ其返回值始終爲0。當使用TableAdapter的,或直接它的工作原理的SQL服務器上運行,返回像120123.基本的LINQ to SQL問題:如何調用存儲過程並檢索單個返回值

這裏的6個值是我的LINQ代碼:

Dim MeetingManager As New MeetingManagerDataContext 
Dim MeetingID As Integer = MeetingManager.NewMeetingID().ReturnValue 

這裏是NewMeetingID過程:

ALTER PROCEDURE [dbo].[NewMeetingID] 
AS 
SET NOCOUNT ON 
BEGIN 

    BEGIN TRANSACTION 

    SELECT UniqueNumber 
    FROM tblTakeANumber 
    WHERE NumberID = 1 

     BEGIN 
      UPDATE tblTakeANumber SET UniqueNumber = UniqueNumber + 1 
      WHERE (NumberID = 1) 
     END 

    COMMIT TRANSACTION 

    RETURN 
END 

我是否缺少someting?

回答

4

返回值是一個存儲過程返回,如值:

create procedure TestProc() 
as 
return 1 

但是你的存儲過程可能是選擇的結果,如:

create procedure TestProc() 
as 
select 1 as Col1 

要檢索的第一列,指定它的名字:

Dim Col1 As Integer = TestDataCintext.TestProc().Single().Col1 

編輯:根據您的評論,這裏是如何修改st直接返回整數的過程。注意(updlock)和隔離級別:

ALTER PROCEDURE [dbo].[NewMeetingID] 
AS 
SET NOCOUNT ON 
BEGIN 
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ 

    BEGIN TRANSACTION 

    declare @UniqueNumber int 

    SELECT @UniqueNumber = UniqueNumber 
    FROM tblTakeANumber (updlock) 
    WHERE NumberID = 1 

    UPDATE tblTakeANumber 
    SET  UniqueNumber = @UniqueNumber + 1 
    WHERE NumberID = 1 

    COMMIT TRANSACTION 

    RETURN @UniqueNumber 
END 
+0

你完全正確的Andomar,它從表中選擇。在SQL服務器上運行時,返回值始終爲0,但它返回一列(UniqueNumber),即一行結果表。我可以修改sproc以返回數字作爲其返回值嗎? (我們沒有DBA)。我已將現有的sproc代碼添加到我的問題中。 – David 2010-07-22 19:12:22

+0

太棒了!謝謝Adomar的所有幫助! – David 2010-07-22 19:54:48

相關問題