我正嘗試使用在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