C# 调用存储过程操作 OUTPUT参数和Return返回值 浅浅的花香味﹌ 2021-09-29 11:14 300阅读 0赞 本文转载:[http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html][http_www.cnblogs.com_libingql_archive_2010_05_02_1726104.html] 存储过程是存放在数据库服务器上的预先编译好的sql语句。使用存储过程,可以直接在数据库中存储并运行功能强大的任务。存储过程在第一应用程序执行时进行语法检查和编译,编译好的版本保存在高速缓存中。在执行重复任务时,存储过程可以提高性能和一致性。由于存储过程可以将一系列对数据库的操作放在数据库服务器上执行,因而可以降低Web服务器的负载,提高整个系统的性能。 1、创建存储过程 [\+ ][ ][?][ ] <table> <tbody> <tr> <td> <p><code>CREATE PROC [DBO].[GetOrdersByOrderDate]</code></p> <p><code> </code><code>@OrderDate DATETIME</code></p> <p><code>AS</code></p> <p><code> </code><code>SELECT</code></p> <p><code> </code><code>[OrderID],[CustomerID],[OrderDate]</code></p> <p><code> </code><code>FROM</code></p> <p><code> </code><code>[Orders]</code></p> <p><code> </code><code>WHERE</code></p> <p><code> </code><code>[OrderDate] >= @OrderDate</code></p> <p> </p> <p> </p> <p><code>USE Northwind</code></p> <p><code>GO</code></p> <p><code>EXEC GetByOrderDate </code><code>'1996-10-10 0:00:00'</code></p> </td> </tr> </tbody> </table> 2、调用存储过程 [\+ ][ ][?][ ] <table> <tbody> <tr> <td> <p><code>SqlConnection conn = </code><code>new</code> <code>SqlConnection(ConfigurationManager.ConnectionStrings[</code><code>"Northwind"</code><code>].ConnectionString);</code></p> <p> </p> <p><code> </code><code>try</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>SqlCommand cmd = </code><code>new</code> <code>SqlCommand();</code></p> <p><code> </code><code>cmd.CommandText = </code><code>"[GetOrdersByOrderDate]"</code><code>;</code></p> <p><code> </code><code>cmd.Connection = conn;</code></p> <p> </p> <p><code> </code><code>cmd.CommandType = CommandType.StoredProcedure;</code></p> <p> </p> <p><code> </code><code>cmd.Parameters.Add(</code><code>"@OrderDate"</code><code>, SqlDbType.DateTime, 8).Value = </code><code>"1998-5-5"</code><code>;</code></p> <p> </p> <p><code> </code><code>conn.Open();</code></p> <p> </p> <p><code> </code><code>SqlDataAdapter da = </code><code>new</code> <code>SqlDataAdapter();</code></p> <p><code> </code><code>da.SelectCommand = cmd;</code></p> <p> </p> <p><code> </code><code>DataSet ds = </code><code>new</code> <code>DataSet();</code></p> <p> </p> <p><code> </code><code>da.Fill(ds);</code></p> <p> </p> <p><code> </code><code>gvOrders.DataSource = ds;</code></p> <p><code> </code><code>gvOrders.DataBind();</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>catch</code> <code>(SqlException ex)</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>throw</code> <code>new</code> <code>Exception(ex.Message, ex);</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>finally</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>conn.Close();</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>}</code></p> </td> </tr> </tbody> </table> 3、输出参数 存储过程可以通过输出参数来返回值。 [\+ ][ ][?][ ] <table> <tbody> <tr> <td> <p><code>CREATE PROC [DBO].[GetOrderDetailsTotalByProductID]</code></p> <p><code> </code><code>@ProductID INT,</code></p> <p><code> </code><code>@Total MONEY OUTPUT</code></p> <p><code>AS</code></p> <p><code> </code><code>SELECT @Total = SUM([UnitPrice]*[Quantity])</code></p> <p><code> </code><code>FROM</code></p> <p><code> </code><code>[Order Details]</code></p> <p><code> </code><code>WHERE</code></p> <p><code> </code><code>[ProductID] = @ProductID</code></p> </td> </tr> </tbody> </table> [\+ ][ ][?][ ] <table> <tbody> <tr> <td> <p><code>SqlConnection(ConfigurationManager.ConnectionStrings[</code><code>"Northwind"</code><code>].ConnectionString);</code></p> <p> </p> <p><code> </code><code>try</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>SqlCommand cmd = </code><code>new</code> <code>SqlCommand();</code></p> <p><code> </code><code>cmd.CommandText = </code><code>"[GetOrderDetailsTotalByProductID]"</code><code>;</code></p> <p><code> </code><code>cmd.Connection = conn;</code></p> <p> </p> <p><code> </code><code>cmd.CommandType = CommandType.StoredProcedure;</code></p> <p> </p> <p><code> </code><code>cmd.Parameters.Add(</code><code>"@ProductID"</code><code>, SqlDbType.Int, 4).Value = 21;</code></p> <p><code> </code><code>cmd.Parameters.Add(</code><code>"@Total"</code><code>, SqlDbType.Money).Direction = ParameterDirection.Output;</code></p> <p> </p> <p><code> </code><code>conn.Open();</code></p> <p><code> </code><code>cmd.ExecuteNonQuery();</code></p> <p> </p> <p><code> </code><code>lblTotal.Text = cmd.Parameters[</code><code>"@Total"</code><code>].Value.ToString();</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>catch</code> <code>(SqlException ex)</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>throw</code> <code>new</code> <code>Exception(ex.Message, ex);</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>finally</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>conn.Close();</code></p> <p><code> </code><code>}</code></p> </td> </tr> </tbody> </table> 4、Return 返回值 使用返回值表示存储过程的执行状态,它类似于输出参数,其区别: (1)、返回值只能返回sql整数值; (2)、返回值不能在存储过程内部声明,它使用Transcat-SQL的RETURN语句返回; [?][ ] <table> <tbody> <tr> <td> <p><code>CREATE PROC [DBO].[GetOrdersByCustomerID]</code></p> <p><code> </code><code>@CustomerID INT,</code></p> <p><code> </code><code>@OrderDate DATETIME OUTPUT</code></p> <p><code>AS</code></p> <p><code> </code><code>SELECT @OrderDate = MAX([OrderDate])</code></p> <p><code> </code><code>FROM</code></p> <p><code> </code><code>[Orders]</code></p> <p><code> </code><code>WHERE</code></p> <p><code> </code><code>[CustomerID] = @CustomerID</code></p> <p> </p> <p><code> </code><code>IF @OrderDate IS NULL</code></p> <p><code> </code><code>RETURN 0</code></p> <p><code> </code><code>ELSE</code></p> <p><code> </code><code>RETURN 1</code></p> </td> </tr> </tbody> </table> [\+ ][ ][?][ ] <table> <tbody> <tr> <td> <p><code>SqlConnection(ConfigurationManager.ConnectionStrings[</code><code>"Northwind"</code><code>].ConnectionString);</code></p> <p> </p> <p><code> </code><code>try</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>SqlCommand cmd = </code><code>new</code> <code>SqlCommand();</code></p> <p><code> </code><code>cmd.CommandText = </code><code>"[GetOrdersByEmployeeID]"</code><code>;</code></p> <p><code> </code><code>cmd.Connection = conn;</code></p> <p> </p> <p><code> </code><code>cmd.CommandType = CommandType.StoredProcedure;</code></p> <p> </p> <p><code> </code><code>cmd.Parameters.Add(</code><code>"@ReturnValue"</code><code>, SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;</code></p> <p><code> </code><code>cmd.Parameters.Add(</code><code>"@EmployeeID"</code><code>, SqlDbType.Int, 4).Value = 1;</code></p> <p><code> </code><code>cmd.Parameters.Add(</code><code>"@OrderDate"</code><code>, SqlDbType.DateTime).Direction = ParameterDirection.Output;</code></p> <p> </p> <p><code> </code><code>conn.Open();</code></p> <p><code> </code><code>cmd.ExecuteNonQuery();</code></p> <p> </p> <p><code> </code><code>lblReturnValue.Text = cmd.Parameters[</code><code>"@ReturnValue"</code><code>].Value.ToString();</code></p> <p><code> </code><code>lblOrderDate.Text = cmd.Parameters[</code><code>"@OrderDate"</code><code>].Value.ToString();</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>catch</code> <code>(SqlException ex)</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>throw</code> <code>new</code> <code>Exception(ex.Message, ex);</code></p> <p><code> </code><code>}</code></p> <p><code> </code><code>finally</code></p> <p><code> </code><code>{ </code></p> <p><code> </code><code>conn.Close();</code></p> <p><code> </code><code>}</code></p> </td> </tr> </tbody> </table> [http_www.cnblogs.com_libingql_archive_2010_05_02_1726104.html]: http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html [ ]: https://www.cnblogs.com/zfanlong1314/p/3949862.html#
还没有评论,来说两句吧...