需要存储过程的返回值

时间:2013-02-22 09:00:21

标签: c# web-services ado.net

我正在尝试使用在Web服务中调用的存储过程来更新SQL Server表。这里我需要来自存储过程的返回值,以便我可以向用户发送有关更新确认的真或假。

我使用C#作为语言,使用ADO.Net架构来连接和操作SQL Server表。

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

4 个答案:

答案 0 :(得分:1)

您可以创建存储过程:

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

SELECT 0
END

您可以使用sql命令对象将其命名为:

object retval = sqlCommand.ExecuteScalar();

答案 1 :(得分:0)

您需要使用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.
}
}

答案 2 :(得分:0)

我个人会推荐实体框架(EF)路由,因为它会为您完成所有编码。您所要做的就是将它指向您的数据库并选择必要的表。它允许您使用内部转换为SQL查询的Linq。

如果您对此不熟悉,我建议在此link中突出显示数据库优先方法。

如果您坚持使用存储过程,仍然可以使用EF与存储过程进行交互,如link和此link中所述。

如果你根本不想使用EF而更喜欢自己编写数据库处理逻辑,可以参考这个link

希望这能为你提供一些清晰度和一些东西。

答案 3 :(得分:0)

创建这样的程序:

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会引发异常。