我正尝试使用在Web服务中调用的存储过程更新SQL Server表。在这里我需要存储过程的返回值,以便我可以向用户发送关于更新确认的真或假。需要存储过程的返回值
我使用C#作为连接和操作SQL Server表的语言和ADO.Net体系结构。
我也在使用SQLDataConnection
(System.Data.SqlClient
)。
我正尝试使用在Web服务中调用的存储过程更新SQL Server表。在这里我需要存储过程的返回值,以便我可以向用户发送关于更新确认的真或假。需要存储过程的返回值
我使用C#作为连接和操作SQL Server表的语言和ADO.Net体系结构。
我也在使用SQLDataConnection
(System.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.
}
}
创建过程是这样的:
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
retrive值在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将阵痛例外。
你可以在存储过程中使用try catch,并且如果失败回滚并返回false http://msdn.microsoft.com/en-us/library/ms175976.aspx – Zaki 2013-02-22 09:02:06
谢谢sam ...但是im nt假设要改变程序.. – user1172910 2013-02-22 09:04:44
嗨萨姆只是通过程序 ALTER PROCEDURE [dbo]。[更新] ( \t @a INT, \t @b INT, \t @c诠释 ) AS BEGIN \t SET NOCOUNT ON \t BEGIN TRANSACTION \t UPDATE UpdateTable \t \t SET \t \t \t a = @ a, \t \t \t b = @ b, \t \t \t C = @ C, \t \t \t \t 其中c = @ C_ \t IF @@ ERROR <> 0 \t BEGIN \t \t回滚事务 \t \t RETURN 0 \t \t END \t - - 调用另一个插入程序 \t Exec InsertTable @a,@ b \t IF @@ ERROR <> 0 \t BEGIN \t \t回滚事务 \t \t RETURN 0 \t \t END \t \t COMMIT TRANSACTION \t RETURN @@ ROWCOUNT END – user1172910 2013-02-22 09:09:06