C# 调用存储过程操作 OUTPUT参数和Return返回值
Posted 人生不断学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 调用存储过程操作 OUTPUT参数和Return返回值相关的知识,希望对你有一定的参考价值。
本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html
存储过程是存放在数据库服务器上的预先编译好的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\'
2、调用存储过程
1 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString); 2 3 try 4 { 5 SqlCommand cmd = new SqlCommand(); 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 = new SqlDataAdapter(); 16 da.SelectCommand = cmd; 17 18 DataSet ds = new DataSet(); 19 20 da.Fill(ds); 21 22 gvOrders.DataSource = ds; 23 gvOrders.DataBind(); 24 } 25 catch (SqlException ex) 26 { 27 throw new Exception(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 = new SqlCommand(); 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 new Exception(ex.Message, ex); } finally { conn.Close(); }
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 RETURN 0 ELSE RETURN 1 SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString); try { SqlCommand cmd = new SqlCommand(); 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 new Exception(ex.Message, ex); } finally { conn.Close(); }
以上是关于C# 调用存储过程操作 OUTPUT参数和Return返回值的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net(C#) 获取 执行sql server 语句/存储过程后的 多个返回值?
如何在 c# 实体框架核心中使用 FromSqlRaw() 将 OUTPUT 参数发送到 MySql 存储过程
[C#对Oracle操作]C#操作调用Orcale存储过程有参数