获取存储过程返回值及代码中获取返回值
例: 向Order表插入一條記錄,返回其標識
CREATE?PROCEDURE?[dbo].[nb_order_insert](
@o_buyerid?int?,
@o_id?bigint?OUTPUT
)
AS
BEGIN
SET?NOCOUNT?ON;
BEGIN
INSERT?INTO?[Order](o_buyerid?)
VALUES?(@o_buyerid?)
SET?@o_id?=?@@IDENTITY
END
END
存儲過程中獲得方法:
DECLARE?@o_buyerid?int
DECLARE?@o_id?bigint
EXEC?[nb_order_insert]?@o_buyerid?,o_id?bigint
2.RETURN過程返回值
CREATE?PROCEDURE?[dbo].[nb_order_insert](
@o_buyerid?int?,
@o_id?bigint?OUTPUT
)
AS
BEGIN
SET?NOCOUNT?ON;
IF(EXISTS(SELECT?*?FROM?[Shop]?WHERE?[s_id]?=?@o_shopid))
BEGIN
INSERT?INTO?[Order](o_buyerid?)
VALUES?(@o_buyerid?)
SET?@o_id?=?@@IDENTITY
RETURN?1?—?插入成功返回1
END
ELSE
RETURN?0?—?插入失敗返回0
END
存儲過程中的獲取方法
DECLARE?@o_buyerid?int
DECLARE?@o_id?bigint
DECLARE?@result?bit
EXEC?@result?=?[nb_order_insert]?@o_buyerid?,o_id?bigint?
3.SELECT 數據集返回值
CREATE?PROCEDURE?[dbo].[nb_order_select](
@o_id?int
)
AS
BEGIN
SET?NOCOUNT?ON;
SELECT?o_id,o_buyerid?FROM?[Order]
WHERE?o_id?=?@o_id
GO
存儲過程中的獲取方法
(1)、使用臨時表的方法
CREATE?TABLE?[dbo].[Temp](
[o_id]?[bigint]?IDENTITY(1,1)?NOT?FOR?REPLICATION?NOT?NULL,
[o_buyerid]?[int]?NOT?NULL
)
INSERT?[Temp]?EXEC?[nb_order_select]?@o_id
–?這時?Temp?就是EXEC執行SELECT?后的結果集
SELECT?*?FROM?[Temp]
DROP?[Temp]?—?刪除臨時表
(2)、速度不怎么樣.(不推薦)
SELECT?*?from?openrowset(’provider_name','Trusted_Connection=yes’,'exec?nb_order_select’)
1.獲取Return返回值
//Create PROCEDURE MYSQL
//???? @a int,
//???? @b int
//AS
//???? return @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcedure;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 10;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@return"].Value.ToString());
2.獲取Output輸出參數值
//Create PROCEDURE MYSQL
//???? @a int,
//???? @b int,
//???? @c int output
//AS
//???? Set @c = @a + @b
//GO
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString());
conn.Open();
SqlCommand MyCommand = new SqlCommand("MYSQL", conn);
MyCommand.CommandType = CommandType.StoredProcedure;
MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int));
MyCommand.Parameters["@a"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int));
MyCommand.Parameters["@b"].Value = 20;
MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int));
MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;
MyCommand.ExecuteNonQuery();
Response.Write(MyCommand.Parameters["@c"].Value.ToString());
C#接收存儲過程返回值:
???? public static int User_Add(User us)
???? {
???????? int iRet;
???????? SqlConnection conn = new SqlConnection(Conn_Str);
???????? SqlCommand cmd = new SqlCommand("User_Add", conn);
???????? cmd.CommandType = CommandType.StoredProcedure;
???????? cmd.Parameters.AddWithValue("@UName", us.UName);
???????? cmd.Parameters.AddWithValue("@UPass", us.UPass);
???????? cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
???????? cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
???????? cmd.Parameters.AddWithValue("@Email", us.Email);
???????? cmd.Parameters.AddWithValue("@RName", us.RName);
???????? cmd.Parameters.AddWithValue("@Area", us.Area);
???????? cmd.Parameters.AddWithValue("@Address", us.Address);
???????? cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
???????? cmd.Parameters.AddWithValue("@Phone", us.Phone);
???????? cmd.Parameters.AddWithValue("@QQ", us.QQ);
???????? cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;???????
???????? try
???????? {
???????????? conn.Open();
???????????? cmd.ExecuteNonQuery();
???????????? iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
???????? }
???????? catch (SqlException ex)
???????? {
???????????? throw ex;
???????? }
???????? finally
???????? {
???????????? conn.Close();
???????? }
???????? return iRet;
???? }
C#接收存儲過程輸出參數:
??? public static decimal Cart_UserAmount(int UID)
??? {
??????? decimal iRet;
??????? SqlConnection conn = new SqlConnection(Conn_Str);
??????? SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);
??????? cmd.CommandType = CommandType.StoredProcedure;
??????? cmd.Parameters.AddWithValue("@UID", UID);
????????cmd.Parameters.Add("@Amount", SqlDbType.Decimal).Direction=ParameterDirection.Output;
??????? try
??????? {
??????????? conn.Open();
??????????? cmd.ExecuteNonQuery();
????????????iRet = (decimal)cmd.Parameters["@Amount"].Value;
??????? }
??????? catch (SqlException ex)
??????? {
??????????? throw ex;
??????? }
??????? finally
??????? {
??????????? conn.Close();
??????? }
??????? return iRet;
??? }
轉載于:https://www.cnblogs.com/laopo/p/4456303.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的获取存储过程返回值及代码中获取返回值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RelayCommand命令
- 下一篇: 第二十五天 how can I 坚持