C#操作存储过程,输入参数,返回结果

分类: VB和ASP(asp) 2008-08-31 20:57 281人阅读 评论(0) 收藏 举报
SQL存储过程显然是非常强大的,.NET也支持对存储过程的调用,自己尝试着写了个小Sample,因为在SQL的学习中,只是笔记一篇。

环境:WindowXP SP2, VS2005, SQL2005
        假定在SQL server上已经存在了NWind数据库,同时有如下的存储过程:(存储过程的功能是根据输入的起始日期和结束日期,返回这个时间段内的销售记录和总销售值,并非本文重点)

 1set ANSI_NULLS ON
 2set QUOTED_IDENTIFIER ON
 3go
 4
 5
 6-- =============================================
 7-- Author:        <Vitoria Tang>
 8-- Create date: <2006.0804>
 9-- Description:    <It is a sample procedure for get sales record as specific datetime>
10-- =============================================
11ALTER PROCEDURE [dbo].[User_SalesByYear] 
12    -- Input parameters: Begin date, End date
13    @BeginDate datetime , @EndDate datetime, @Price int = 0 OUTPUT
14AS
15BEGIN
16    --declare @Price money
17    CREATE TABLE #TempTable
18    (ID int not null, ProductName nvarchar(40) not null, Price money not null)
19
20    INSERT INTO #TempTable(ID, ProductName, Price)
21        SELECT Orders.OrderID,  Products.ProductName, [Order Details].UnitPrice * [Order Details].Discount
22            FROM Orders, Products, [Order Details]
23            WHERE (
24                ((Orders.ShippedDate) Is Not Null And 
25                    (Orders.ShippedDate) Between @BeginDate And @EndDate)
26                    AND 
27                    (Orders.OrderID = [Order Details].OrderID AND [Order Details].ProductID = Products.ProductID)
28                );
29
30   Select * from #TempTable
31    
32   Select @Price = sum(Price) from [#TempTable]
33   Print @Price
34   return (@Price)
35END
36

Sample界面:

首先建立与数据库的连接:

1private System.Data.SqlClient.SqlConnection _connection = null;
2private void InitializeSource()
3{
4      //’Server name’需要根据自己的实际SqlServer的机器名填上哦
5      string connetctStr = "Data Source=’Server name’;Initial Catalog=NWind;Integrated Security=True";
6      if( _connection == null)
7            _connection = new System.Data.SqlClient.SqlConnection(connetctStr);
8}
9

其次创建执行存储过 程的SqlCommand,当然前后需要打开和关闭数据库连接,调用存储过程需要给SqlCommand的CommandType属性赋值为 CommandType.StoredProcedure,我们的存储过程是有输入和输出参数的,那么在添加到SqlCommand.Prameters 集合中就可以了。如果是输出参数,设置SqlParameter实例的Direction值就可以了,该属性默认值为Input,所以不设置的话,在执行 完后,得不到输出值哦。具体参见下面的代码。

 1private SqlCommand GetCommand(object sender, EventArgs e)
 2{
 3     // User_SalesByYear是存储过程的名字
 4     string cmdText = "User_SalesByYear"; 
 5     SqlCommand executeCmd = new SqlCommand();
 6     executeCmd.Connection = _connection;
 7     // 指出executeCmd是执行存储过程
 8     executeCmd.CommandType = CommandType.StoredProcedure;
 9     executeCmd.CommandText = cmdText;
10     // 看上面的存储过程,因为是有三个输入参数,我们需要给填到SqlCommand.Parameters集合中
11     // 参数一:BeginDate
12     SqlParameter parameter = new SqlParameter( "@BeginDate", SqlDbType.DateTime);
13     parameter.Value = new DateTime( 1995, 1,1);
14     executeCmd.Parameters.Add(parameter);
15     // 参数二:EndDate 
16     parameter = new SqlParameter("@EndDate", SqlDbType.DateTime);
17     parameter.Value = new DateTime(1995, 12, 30);
18     executeCmd.Parameters.Add(parameter);
19     // 参数三:Price,这是个输出参数,需要指明参数方向,否则存储过程的输出值不会写到参数中来
20      parameter = new SqlParameter("@Price", 0);
21      parameter.Direction = ParameterDirection.InputOutput;
22      executeCmd.Parameters.Add(parameter);
23     return executeCmd;
24}
25

本文的示例是用SqlDataAdapter来填充了DataSet并把它显示在DataGridView control上,所以接下来,打开数据库连接创建SqlDataAdapter,并填充DataSet吧.

 1private void button1_Click(object sender, EventArgs e)
 2{
 3      _connection.Open();
 4      SqlDataAdapter adapter = new SqlDataAdapter();
 5      adapter.SelectCommand = executeCmd;
 6
 7      DataSet source = new DataSet();
 8      adapter.Fill(source);
 9      // 输出存储过程的输出参数到Output window看看吧
10      Console.WriteLine(executeCmd.Parameters[2].Value);
11      this.dataGridView1.DataSource = source.Tables[0];
12       _connection.Close();
13}
14

分享到:
上一篇:mcse2000考试 下一篇:DetailsView应用之雕虫小技

C#操作存储过程,输入参数,返回结果相关推荐

  1. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

  2. php mssql 存储过程 输入参数,MSSQL_SQL Server存储过程中使用表值作为输入参数示例,在2008之前如果我们想要将表作 - phpStudy...

    SQL Server存储过程中使用表值作为输入参数示例 在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML ...

  3. MySQL的存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)

    目录 什么是存储过程? 特点 语法格式 局部变量 用户变量 系统变量 查看修改全局变量 查看修改会话变量 传入参数 输出参数 修改传入参数值 每文一语 什么是存储过程? MySQL 5.0 版本开始支 ...

  4. mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...

    概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...

  5. python接入excel_Excel 借助 Python 连接 WorkBench,实现 Excel 输入参数返回结果

    现在可以使用非常流行的脚本语言 Python 来实现,WorkBench 应用程序的项目页面.工程数据和参数管理器,这一点非常的方便:但同时由于 Python 也适用于 Microsoft Excel ...

  6. mysql存储过程输入参数拆分_mysql 存储过程字符分割

    s_str varchar(2000), s_split varchar(2) begin /*split分割字符串并放入临时表*/ declare lenstr int ; declare resu ...

  7. excel怎么设置自动计算_超全8套工程测量计算Excel自动算量表,输入参数即可得出精准结果...

    超全8套工程测量计算Excel自动算量表,输入参数即可得出精准结果 日常工程测量中需要大量的数据计算,一个失误可能就带从头再来,熬夜加班更是经常有的事情,测量计算的快速一定程度上也影响了工程的进度.今 ...

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

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

  9. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

最新文章

  1. 这几种Java异常处理方法,你会吗?
  2. 中公教育计算机网络,计算机考试题库:计算机网络模拟练习题(2)
  3. vuex的计算属性_Vuex详细介绍
  4. 多图上传 - Web Uploader
  5. 0网卡开启_中标麒麟Linux v7系统下设置双网卡bond或team绑定详细过程
  6. [BZOJ1798][AHOI2009]Seq维护序列 线段树
  7. 【软件工程实践 · 团队项目】 第二次作业
  8. picsart旧版本_picsart 2016旧版本下载-picsart 2016版本下载v5.25.4 安卓中文版-2265安卓网...
  9. VirtualBox 搭建android-x86
  10. 两个正态总体均值差的检验(t)
  11. android粘性广播删除,android 广播机制(2) 粘性广播-Go语言中文社区
  12. 天池竞赛-资金流入流出预测总结
  13. excel文件不能编辑怎么回事?
  14. 运算器的基本组成及操作过程
  15. git登陆用户的配置
  16. 蓝桥杯练习系统-入门训练java版
  17. 微软答应2021年再给Flash续命几个月
  18. 计算机应用与基础教学计划,《计算机应用基础》教学计划
  19. PDA汽车检测系统收获
  20. 计算机重启恢复到推荐分辨率,win10系统重启后分辨率总是出现变化的还原方法...

热门文章

  1. HBase内置过滤器java api的总结
  2. docker入门实践之数据卷管理
  3. 虚拟软件VMware workstation安装
  4. 向Maven的本地库中添加jar文件
  5. 关于/etc/init.d/nfs脚本解读中的疑问解答
  6. 基于×××环境下的远程视频监控传输
  7. ASP.NET底层的初步认识与理解
  8. 电脑计算机无法安3.5,Windows无法安装以下功能:.NET Framework 3.5(包括 .NET 2.0 和 3.0)解决方法...
  9. 解析php变量,php使用parse_str实现查询字符串解析到变量中的方法
  10. bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势)