2013-02-22 140 views
0

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

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

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

+0

你可以在存储过程中使用try catch,并且如果失败回滚并返回false http://msdn.microsoft.com/en-us/library/ms175976.aspx – Zaki 2013-02-22 09:02:06

+0

谢谢sam ...但是im nt假设要改变程序.. – user1172910 2013-02-22 09:04:44

+0

嗨萨姆只是通过程序 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

回答

1

您可以创建存储过程为:

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

SELECT 0 
END 

而且你可以使用SQL命令对象调用它:

object retval = sqlCommand.ExecuteScalar(); 
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. 
} 
} 
0

我个人建议的实体框架(EF)的路线,因为它确实所有编码为您服务。你所要做的就是将它指向你的数据库并选择必要的表格。它允许您使用内部转换为SQL查询的Linq。

如果您是新手,我会推荐在此link中突出显示的数据库第一种方法。

如果您一直在使用存储过程,仍然可以使用EF与您的存储过程进行交互,如linklink中所述。

如果你不希望在所有使用EF和喜欢写自己的数据库处理逻辑,你可以参考这个link

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

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 

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将阵痛例外。