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


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、调用存储过程


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、输出参数
存储过程可以通过输出参数来返回值。


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语句返回;


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

984

被折叠的 条评论
为什么被折叠?



