本文转载: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、调用存储过程

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

             try
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "[GetOrdersByOrderDate]";
cmd.Connection = conn; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@OrderDate", SqlDbType.DateTime, ).Value = "1998-5-5"; conn.Open(); SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); gvOrders.DataSource = ds;
gvOrders.DataBind();
}
catch (SqlException ex)
{
throw new Exception(ex.Message, ex);
}
finally
{
conn.Close();
}
}

调用存储过程

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, ).Value = ;
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
ELSE
RETURN
  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, ).Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int, ).Value = ;
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返回值的更多相关文章

  1. 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值

    关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...

  2. C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

      C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...

  3. clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...

  4. C#获取存储过程的 Return返回值和Output输出参数值

    1.获取Return返回值  程序代码 //存储过程//Create PROCEDURE MYSQL//     @a int,//     @b int//AS//     return @a + ...

  5. 自定义函数和调用函数 return返回值

    1.Q: 为什么要有函数,函数是什么? A: 函数能提高应用的模块性,和代码的重复利用率 2. 函数分为两个阶段: 1.定义阶段 2.调用阶段 3.关于函数调用: 01.函数的内存地址加上()就是调用 ...

  6. 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

    接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码 ...

  7. MSSQL - 存储过程Return返回值

    1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...

  8. C++对象内存布局,this指针,对象作为参数,作为返回值

    class TestClass { public: void setNum(int num) { m_num1 = num; } int getNum() { return m_num1; } pri ...

  9. 写一方法用来计算1+2+3+...n,其中n作为参数输入,返回值可以由方法名返回,也可以由参数返回

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. MVC第二天

    一.过滤器filter 注意:如果继承自接口需要让类实现FilterAttribute,才可以作为特性使用使用方式1:作为Controller或Action的特性使用方式2:在Global中注册为全局 ...

  2. parallelism

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Traditionally, the co ...

  3. IntelliJ IDEA中如何显示和关闭----工具栏,目录栏,(转)

    工具栏:就是上面有个好多的快捷按钮的那个栏,比如撤销,上传,下载设置,扳手按钮,等等. 目录栏,就是刚刚装的时候,这个会显示,但是不知道怎么关闭,但是这个又没什么用. 如图: 就是对应的几个按钮,自己 ...

  4. PL/SQL %TYPE和%ROWTYPE的区别【转】

    %TYPE: 定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型 相同,这时可以使用%TYPE.         使用%TYPE 特性的优点在于: 1.所引 ...

  5. 【vue.js权威指南】读书笔记(第二章)

    [第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...

  6. :active 为什么在ios上失效

    :active是针对鼠标,而手机上是没有鼠标,而是touchstart,所以早成了ios上不兼容 解决方法是: window.onload = function(){ document.body.ad ...

  7. Python模拟删除字符串两边的空白

    目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...

  8. 实现Unicode和汉字的相互转换

    <title>汉字和Unicode编码互转</title><script Language=Javascript>var classObj= { ToUnicode ...

  9. 微信支付开发(7) H5支付

    关键字:微信支付 微信支付v3 H5支付 wap支付 prepay_id 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv3_h5.html 本文 ...

  10. Python之路-(Django进阶一)

    Django请求生命周期: 首先,客户端发送请求到服务器的urls库,通过匹配url后面的关键字,去找指定app里面的的view. 然后,app通过判断,拿到数据库数据和html模板文件. 最后,将拿 ...