本文转载: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. Mysql 数据库之修改标的结构

    比如我们新建一user表 create table user( id int unsigned auto_increment primary key, name varchar(60) not nul ...

  2. 如何在CentOS配置Apache的HTTPS服务

    http://www.4byte.cn/learning/120027/ru-he-zai-centos-pei-zhi-apache-de-https-fu-wu.html

  3. 《React Native入门与实战》读书笔记(1)

    ReactNative介绍 它的底层引擎是JavaScript Core,调用的是原生组件而非HTML5组件(HTML+CSS+JavaScript构建的组件).运行时,可以做到与Native App ...

  4. oracle表大小

    查某一用户下的表 select SEGMENT_NAME,TABLESPACE_NAME,sum(BYTES/1024/1024)||'M'  from USER_extents where SEGM ...

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

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

  6. Windows Internal Database Service Pack 4 x64 Edition (KB2463332)安装失败

    系统是Windows Server 2008 R2,补丁Windows Internal Database Service Pack 4 x64 Edition (KB2463332)总是安装失败,W ...

  7. OpenCV2计算机编程手册(一)操作像素

    1. 引言 从根本上来说,一张图像是一个由数值组成的矩阵.这也是opencv中使用 代表黑色,代表白色.对于彩色图像(BGR三通道)而言,每个像素需要三个这样的8位无符号数来表示,这种情况下,矩阵的元 ...

  8. C# Console控制命令

    参考博客:C# 控制台程序(命令行程序)设置字体颜色,窗口宽高,光标行数 禁用控制台关闭按钮,参考博客:禁用C#控制台应用程序的关闭按钮 参考博客:c# 控制台程序禁用关闭按钮完美解决 #region ...

  9. RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V3.0 版本强势发布

    继上个版本“RDIFramework.NET V2.9版本”的推出,受到了重多客户的认可与选择,V2.9版本是非常成功与稳定的版本,感谢大家的认可与长期以来的关注与支持.V3.0版本在V2.9版本的基 ...

  10. 设计模式学习笔记c++版——单例模式

    特别注意单例模式c++实现在main.cpp中引用的时候要去申明下: Singleton * Singleton::m_Instance = NULL; //定义性声明 不然会报错:无法解析的外部符号 ...