0

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

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

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

4

4 回答 4

1

您可以将存储过程创建为:

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

SELECT 0
END

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

object retval = sqlCommand.ExecuteScalar();
于 2013-02-22T09:05:10.940 回答
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.
}
}
于 2013-02-22T09:07:32.997 回答
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 将出现异常。

于 2013-02-22T09:25:01.740 回答
0

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

如果您对此不熟悉,我会推荐此链接中突出显示的数据库优先方法。

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

如果您根本不想使用 EF 而更喜欢自己编写数据库处理逻辑,您可以参考此链接

希望这能给你一些清晰和开始的东西。

于 2013-02-22T09:19:34.977 回答