簡體   English   中英

需要存儲過程的返回值

[英]need a return value from the stored procedure

我正在嘗試使用在Web服務中調用的存儲過程來更新SQL Server表。 在這里,我需要存儲過程的返回值,以便可以向用戶發送有關更新確認的true或false。

我使用C#作為連接和處理SQL Server表的語言和ADO.Net體系結構。

我也在使用SQLDataConnectionSystem.Data.SqlClient )。

您可以按以下方式創建存儲過程:

CREATE PROC ReturningProc
AS
BEGIN
IF (@SomeCondition)
      SELECT 1

SELECT 0
END

您可以使用sql命令對象將其調用為:

object retval = sqlCommand.ExecuteScalar();

您將需要使用SqlDataReader對象來讀取結果。 簡而言之,像這樣:

var command = new SqlCommand(commandText, sqlConnection);
command.CommandType = CommandType.StoredProcedure;
using(var reader = command.ExecuteReader())
{
while(reader.Read())
{
var result = reader[0];
//Respond to result.
}
}

我個人建議使用實體框架(EF)路由,因為它會為您完成所有編碼。 您所要做的就是將其指向數據庫並選擇必要的表。 它允許您使用在內部轉換為SQL查詢的Linq。

如果您是新手,建議您使用此鏈接中突出顯示的數據庫優先方法。

如果您堅持使用存儲過程,則仍然可以按照本鏈接和本鏈接中的說明使用EF與存儲過程進行交互。

如果您根本不想使用EF而更願意自己編寫數據庫處理邏輯,則可以參考此鏈接

希望這可以使您有所了解並從頭開始。

創建過程如下所示:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

  CREATE PROCEDURE [dbo].[Validate]
  @b BIT OUT

 AS
    if(some condition)
       SET @b = 1
    else
       SET @b=0
 GO

像這樣在C#中檢索值

SqlParameter retval = sqlcomm.Parameters.Add("@b", SqlDbType.Bit);
retval.Direction = ParameterDirection.ReturnValue;
sqlcomm.ExecuteNonQuery();
string retunvalue =  Convert.ToBoolean(sqlcomm.Parameters["@b"].Value);

並且在調用存儲過程之前已將@b的值設置為其他明智的SP將導致異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM