c# 调用mysql存储过程 返回值_C# 调用存储过程操作 OUTPUT参数和Return返回值

本文详细介绍了如何使用C#调用MySQL存储过程,包括设置输入参数、输出参数和Return返回值。通过示例展示了创建存储过程、调用存储过程以及处理输出参数和Return返回值的方法,帮助开发者更好地理解和操作数据库。

存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。存储过程在第一应用程序执行时进行语法检查和编译,编译好的版本保存在高速缓存中。在执行重复任务时,存储过程可以提高性能和一致性。由于存储过程可以将一系列对数据库的操作放在数据库服务器上执行,因而可以降低Web服务器的负载,提高整个系统的性能。

1、创建存储过程

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

CREATE PROC [DBO].[GetOrdersByOrderDate]

@OrderDate DATETIME

AS

SELECT

[OrderID],[CustomerID],[OrderDate]

FROM

[Orders]

WHERE

[OrderDate]>=@OrderDate

USE Northwind

GO

EXEC GetOrdersByOrderDate'1996-10-10 0:00:00'

View Code

2、调用存储过程

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);2

3 try

4 {5 SqlCommand cmd = newSqlCommand();6 cmd.CommandText = "[GetOrdersByOrderDate]";7 cmd.Connection =conn;8

9 cmd.CommandType =CommandType.StoredProcedure;10

11 cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime, 8).Value = "1998-5-5";12

13 conn.Open();14

15 SqlDataAdapter da = newSqlDataAdapter();16 da.SelectCommand =cmd;17

18 DataSet ds = newDataSet();19

20 da.Fill(ds);21

22 gvOrders.DataSource =ds;23 gvOrders.DataBind();24 }25 catch(SqlException ex)26 {27 throw newException(ex.Message, ex);28 }29 finally

30 {31 conn.Close();32 }33 }

调用存储过程

3、输出参数

存储过程可以通过输出参数来返回值。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

CREATE PROC [DBO].[GetOrderDetailsTotalByProductID]

@ProductID INT,

@Total MONEY OUTPUT

AS

SELECT @Total= SUM([UnitPrice]*[Quantity])

FROM

[Order Details]

WHERE

[ProductID]=@ProductID

SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);try{

SqlCommand cmd= newSqlCommand();

cmd.CommandText= "[GetOrderDetailsTotalByProductID]";

cmd.Connection=conn;

cmd.CommandType=CommandType.StoredProcedure;

cmd.Parameters.Add("@ProductID", SqlDbType.Int, 4).Value = 21;

cmd.Parameters.Add("@Total", SqlDbType.Money).Direction =ParameterDirection.Output;

conn.Open();

cmd.ExecuteNonQuery();

lblTotal.Text= cmd.Parameters["@Total"].Value.ToString();

}catch(SqlException ex)

{throw newException(ex.Message, ex);

}finally{

conn.Close();

}

View Code

4、Return 返回值

使用返回值表示存储过程的执行状态,它类似于输出参数,其区别:

(1)、返回值只能返回sql整数值;

(2)、返回值不能在存储过程内部声明,它使用Transcat-SQL的RETURN语句返回;

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

CREATE PROC [DBO].[GetOrdersByCustomerID]

@CustomerID INT,

@OrderDate DATETIME OUTPUT

AS

SELECT @OrderDate=MAX([OrderDate])

FROM

[Orders]

WHERE

[CustomerID]=@CustomerID

IF @OrderDate IS NULL

RETURN0ELSE

RETURN1SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);try{

SqlCommand cmd= newSqlCommand();

cmd.CommandText= "[GetOrdersByEmployeeID]";

cmd.Connection=conn;

cmd.CommandType=CommandType.StoredProcedure;

cmd.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction =ParameterDirection.ReturnValue;

cmd.Parameters.Add("@EmployeeID", SqlDbType.Int, 4).Value = 1;

cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime).Direction =ParameterDirection.Output;

conn.Open();

cmd.ExecuteNonQuery();

lblReturnValue.Text= cmd.Parameters["@ReturnValue"].Value.ToString();

lblOrderDate.Text= cmd.Parameters["@OrderDate"].Value.ToString();

}catch(SqlException ex)

{throw newException(ex.Message, ex);

}finally{

conn.Close();

}

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值