C#获取存储过程的 Return返回值和Output输出参数值
一、不用SQLHelper.cs等幫助類
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;
????????}
二、用SQLHelper.cs等幫助類,其思想一樣
如:(貼出部分代碼)
string readercode = txt_reader_code.Text;
string bookcode = txt_book_code.Text;
decimal money = Convert.ToDecimal(txt_price.Text);
DateTime borrowDate = Convert.ToDateTime(DateTime.Now.ToShortDateString());
?DataTable table = new DBUtility.bookType().GetTableByBookBarCode(bookcode);
double borrowday;
double getday = 0d;
if (table != null && table.Rows.Count > 0)
{
????if (double.TryParse(table.Rows[0]["borrowday"].ToString(), out borrowday))
????{
?????????getday = borrowday;
????}
}
else
{
?????Pub.Util.AlertPostBack(Page, "得到圖書借閱天數失敗");
?????return;
}
DateTime returnDate = Convert.ToDateTime(DateTime.Now.AddDays(getday).ToShortDateString());
string readerName = txt_name.Text.Trim();
string bookName = txt_book_name.Text.Trim();
SqlParameter[] parameters = {
???????????new SqlParameter("@readerBarCode",SqlDbType.VarChar),
???????????new SqlParameter("@bookBarCode",SqlDbType.VarChar),
???????????new SqlParameter("@hire",SqlDbType.Money),
???????????new SqlParameter("@borrowDate",SqlDbType.DateTime),
???????????new SqlParameter("@returnDate",SqlDbType.DateTime),
???????????new SqlParameter("@readerName",SqlDbType.VarChar),
???????????new SqlParameter("@bookName",SqlDbType.VarChar),
???????????new SqlParameter("@return",SqlDbType.Int)???????????//添加一個返回參數
???????};
parameters[0].Value = readercode;
parameters[1].Value = bookcode;
parameters[2].Value = money;
parameters[3].Value = borrowDate;
parameters[4].Value = returnDate;
parameters[5].Value = readerName;
parameters[6].Value = bookName;
parameters[7].Direction = ParameterDirection.ReturnValue; //聲明此參數是返回類型
DBUtility.SQLHelper.ExecuteNonQuery(DBUtility.SQLHelper.BookConn, CommandType.StoredProcedure, "p_bookBorrow", parameters);
int num = Convert.ToInt32(parameters[7].Value.ToString());//提取存儲過程返回參數的值,成功為0,不成功為-1
if (num == 0)
{?????Pub.Util.AlertPostBack(Page, "借閱成功");
}
else
???Pub.Util.AlertPostBack(Page, "借閱失敗");
?
?
?
存儲過程
?
create procedure p_bookBorrow(@readerBarCode varchar(30),@bookBarCode varchar(30),@hire money,@borrowDate datetime,@returnDate datetime,@bookName varchar(30),@readerName varchar(20))
as
begin tran
insert into t_reader_book values(@readerBarCode,@bookBarCode,@borrowDate,@returnDate,@bookName,@readerName)
if(@@error<>0)
begin
??rollback tran
??return -1
end
update t_readerinfo set borrownum=borrownum+1,[money]=[money]-@hire where readerBarCode = @readerBarCode
if(@@error<>0)
begin
??rollback tran
??return -1
end
update t_bookinfo set stock=stock-1 where bookBarCode?=@bookBarCode
if(@@error<>0)
begin
??rollback tran
??return -1
end
insert into logs values(getDate(),'條形碼號為:'+@readerBarCode+'的讀者,借閱了圖書編號為:'+@bookBarCode+'的書籍')
if(@@error<>0)
begin
??rollback tran
??return -1
end
commit tran
if(@@error<>0)
??return -1
else
??return 0
GO
?
轉載于:https://www.cnblogs.com/xsq521/p/5509531.html
總結
以上是生活随笔為你收集整理的C#获取存储过程的 Return返回值和Output输出参数值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到两个月亮代表什么
- 下一篇: 总是梦到牙齿掉了是什么意思