2011年7月5日 星期二

接收 Store Procedure 的傳回值


要將資料傳回一般有 3 種方式:
  1. 使用 SELECT 以表格方式傳回。
  2. 設定 Output Parameter 以參數方式傳回。
  3. 使用 RETURN 傳回 1 個整數型別的資料。
以下列出第 3 種傳回方式,在 SQL 及 ADO.NET 中接收的方法。
使用 RETURN 傳回單一數值
Store Procedure:
1
CREATE PROCEDURE mysp_InsData (
2
@LastName varchar(30),
3
@FirstName varchar(10)
4
)
5
AS
6
BEGIN
7
    INSERT INTO Customer (LastName, FirstName) VALUES (@LastName, @FirstName);
8
    RETURN SCOPE_IDENTITY();
9
END
在新增完資料後,使用 RETURN 返回新增資料的識別值。

在另一支預儲程序中接收此預儲程序傳回的值:
1
DECLARE @intRow int;
2
EXEC @intRow = mysp_InsData 'Walter''Liao';
3
SELECT @intRow;

C#
01
SqlConnection conn = new SqlConnection(strConn);
02
SqlCommand cmd = new SqlCommand(string.Empty, conn);
03
conn.Open();
04
05
cmd.Parameters.Clear();
06
cmd.CommandType = CommandType.StoredProcedure;
07
cmd.CommandText = "mysp_InsData";
08
cmd.Parameters.Add("@LastName", SqlDbType.VarChar, 30).Value = "Walter";
09
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 10).Value = "Liao";
10
11
SqlParameter retID = cmd.Parameters.Add("@ReturnValue", SqlDbType.Int);
12
retID.Direction = ParameterDirection.ReturnValue;
13
14
try
15
{
16
    cmd.ExecuteNonQuery();
17
}
18
catch (Exception ex)
19
{
20
    //當新增資料時若發生錯誤,可撰寫程式將錯誤訊息記錄下來
21
    //InsErrorLog("mysp_InsData", ex.Message);
22
}
23
24
Console.WriteLine("Return Value:" + retID.Value);
25
26
conn.Close();
27
conn.Dispose();
第 11 行:建立要接收 RETURN 的參數,參數名稱 @ReturnValue 可自定。
第 12 行:將參數設定為 Return Value。(假使參數為 OUTPUT則.Direction可設定為.Output)
第 24 行:用 .value 將傳回資料取出。

沒有留言:

張貼留言