2013-02-22 178 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將陣痛例外。