我正在尝试使用在Web服务中调用的存储过程来更新SQL Server表。这里我需要来自存储过程的返回值,以便我可以向用户发送有关更新确认的真或假。
我使用C#作为语言,使用ADO.Net架构来连接和操作SQL Server表。
我也在使用SQLDataConnection
(System.Data.SqlClient
)。
答案 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会引发异常。