zoukankan      html  css  js  c++  java
  • 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(40not 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( 19951,1);
    14     executeCmd.Parameters.Add(parameter);
    15     // 参数二:EndDate 
    16     parameter = new SqlParameter("@EndDate", SqlDbType.DateTime);
    17     parameter.Value = new DateTime(19951230);
    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应用之雕虫小技
查看全文
  • 相关阅读:
    MongoDB —— 第三篇 高级操作
    MongoDB —— 第七篇 运维技术
    MongoDB —— 第八篇 驱动实践
    EditPlus 使用技巧集萃(转)
    面试经验网上资源汇总
    设计模式网上资料整合理解——创建型模式(一)
    C#编写扩展存储过程
    利用VS调试脚本
    用DevExpress.XtraReports实现复杂报表套打的一些经验
    无废话.NET帮助文件生成——Sandcastle+SHFB
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/2153883.html
  • Copyright © 2011-2022 走看看