NET用使用存储过程获取输出参数的代码示例!

http://niunan.javaeye.com/category/42319

在网上也找到许多关于.NET中使用存储过程获取输出参数的代码,但怎么看怎么都是记不住,还是自己亲自实践一遍后再记录下来,这样才能记得住,必竟自己做过的东西是比较难忘记的!!!
    步骤如下:
    ①建立数据库logintest,在数据库中建立表User.

     向建立的表中添加几条测试数据.
    ②在数据库中建立存储过程:

Sql代码 复制代码
  1. USE [logintest]   
  2. GO   
  3. -- =============================================   
  4. -- Author:      牛腩   
  5. -- Create date: 2008-10-21 14:01   
  6. -- Description: 通过传入的uid获取用户姓名   
  7. -- =============================================   
  8. SET ANSI_NULLS ON  
  9. GO   
  10. SET QUOTED_IDENTIFIER ON  
  11. GO   
  12. CREATE PROCEDURE [dbo].[GetUNameById]   
  13. @uid int,   
  14. @name varchar(50) output  
  15. AS  
  16. BEGIN  
  17.     select @name=uname from [Userwhere uid=@uid   
  18. END  
USE [logintest]
GO
-- =============================================
-- Author:		牛腩
-- Create date: 2008-10-21 14:01
-- Description:	通过传入的uid获取用户姓名
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GetUNameById]
@uid int,
@name varchar(50) output
AS
BEGIN
	select @name=uname from [User] where uid=@uid
END

    ③在VS中建立一个测试页面ProcTest.aspx,在ProcTest.aspx.cs中导入命名空间
C#代码 复制代码
  1. using System.Data;   
  2. using System.Data.SqlClient;  
using System.Data;
using System.Data.SqlClient;

    ④在Page_Load方法里写入如下代码:
C#代码 复制代码
  1. // 建立连接字符串,在正式项目中可放在web.config中   
  2.        string connStr = "server=niunan\\sqlexpress;uid=sa;pwd=123456;database=logintest";   
  3.        // 连接数据库   
  4.        SqlConnection conn = new SqlConnection(connStr);   
  5.   
  6.        try  
  7.        {   
  8.            // 打开数据库连接   
  9.            conn.Open();   
  10.            // 创建用于执行数据库操作的命令对象, GetUNameById为存储过程名称   
  11.            SqlCommand cmd = new SqlCommand("GetUNameById", conn);   
  12.            // 设置执行命令的方式为存储过程   
  13.            cmd.CommandType = CommandType.StoredProcedure;   
  14.   
  15.            // 向命令对象添加存储过程所需要的参数   
  16.            cmd.Parameters.Add("@uid", SqlDbType.Int);   
  17.            // 设置要传入到存储过程的参数值   
  18.            cmd.Parameters["@uid"].Value = 2;   
  19.   
  20.            // 添加存储过程中的输出参数,如果是字符型的必须定义长度   
  21.            cmd.Parameters.Add("@name", SqlDbType.VarChar, 50);   
  22.            // 设置参数为output输出参数   
  23.            cmd.Parameters["@name"].Direction = ParameterDirection.Output;   
  24.   
  25.            // 执行存储过程   
  26.            cmd.ExecuteReader();   
  27.   
  28.            // 获取执行存储过程后的输出参数   
  29.            string name = cmd.Parameters["@name"].Value.ToString();   
  30.   
  31.            Response.Write(name);   
  32.        }   
  33.        catch (Exception ex)   
  34.        {   
  35.            Response.Write(ex.Message);   
  36.            if (conn.State == ConnectionState.Open)   
  37.            {   
  38.                conn.Close();   
  39.            }   
  40.        }   
  41.        finally  
  42.        {   
  43.            if (conn.State == ConnectionState.Open)   
  44.            {   
  45.                conn.Close();   
  46.            }   
  47.        }   
 // 建立连接字符串,在正式项目中可放在web.config中
        string connStr = "server=niunan\\sqlexpress;uid=sa;pwd=123456;database=logintest";
        // 连接数据库
        SqlConnection conn = new SqlConnection(connStr);

        try
        {
            // 打开数据库连接
            conn.Open();
            // 创建用于执行数据库操作的命令对象, GetUNameById为存储过程名称
            SqlCommand cmd = new SqlCommand("GetUNameById", conn);
            // 设置执行命令的方式为存储过程
            cmd.CommandType = CommandType.StoredProcedure;

            // 向命令对象添加存储过程所需要的参数
            cmd.Parameters.Add("@uid", SqlDbType.Int);
            // 设置要传入到存储过程的参数值
            cmd.Parameters["@uid"].Value = 2;

            // 添加存储过程中的输出参数,如果是字符型的必须定义长度
            cmd.Parameters.Add("@name", SqlDbType.VarChar, 50);
            // 设置参数为output输出参数
            cmd.Parameters["@name"].Direction = ParameterDirection.Output;

            // 执行存储过程
            cmd.ExecuteReader();

            // 获取执行存储过程后的输出参数
            string name = cmd.Parameters["@name"].Value.ToString();

            Response.Write(name);
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
        finally
        {
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        } 

    运行ASPX页面,则能够看到执行存储过程后返回的结果!
    需要注意的是如果输出参数是varchar类型的话则必须定义长度,否则会出错,如果输出参数是数字型的话就不必定义长度了!
    下面是完整的ProcTest.aspx.cs的源码:
C#代码 复制代码
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Linq;   
  4. using System.Web;   
  5. using System.Web.UI;   
  6. using System.Web.UI.WebControls;   
  7. using System.Data;   
  8. using System.Data.SqlClient;   
  9.   
  10. public partial class ProcTest : System.Web.UI.Page   
  11. {   
  12.     protected void Page_Load(object sender, EventArgs e)   
  13.     {   
  14.         // 建立连接字符串,在正式项目中可放在web.config中   
  15.         string connStr = "server=niunan\\sqlexpress;uid=sa;pwd=123456;database=logintest";   
  16.         // 连接数据库   
  17.         SqlConnection conn = new SqlConnection(connStr);   
  18.   
  19.         try  
  20.         {   
  21.             // 打开数据库连接   
  22.             conn.Open();   
  23.             // 创建用于执行数据库操作的命令对象, GetUNameById为存储过程名称   
  24.             SqlCommand cmd = new SqlCommand("GetUNameById", conn);   
  25.             // 设置执行命令的方式为存储过程   
  26.             cmd.CommandType = CommandType.StoredProcedure;   
  27.   
  28.             // 向命令对象添加存储过程所需要的参数   
  29.             cmd.Parameters.Add("@uid", SqlDbType.Int);   
  30.             // 设置要传入到存储过程的参数值   
  31.             cmd.Parameters["@uid"].Value = 2;   
  32.   
  33.             // 添加存储过程中的输出参数   
  34.             cmd.Parameters.Add("@name", SqlDbType.VarChar, 50);   
  35.             // 设置参数为output输出参数   
  36.             cmd.Parameters["@name"].Direction = ParameterDirection.Output;   
  37.   
  38.             // 执行存储过程   
  39.             cmd.ExecuteReader();   
  40.   
  41.             // 获取执行存储过程后的输出参数   
  42.             string name = cmd.Parameters["@name"].Value.ToString();   
  43.   
  44.             Response.Write(name);   
  45.         }   
  46.         catch (Exception ex)   
  47.         {   
  48.             Response.Write(ex.Message);   
  49.             if (conn.State == ConnectionState.Open)   
  50.             {   
  51.                 conn.Close();   
  52.             }   
  53.         }   
  54.         finally  
  55.         {   
  56.             if (conn.State == ConnectionState.Open)   
  57.             {   
  58.                 conn.Close();   
  59.             }   
  60.         }    
  61.     }   
  62. }  

转载于:https://www.cnblogs.com/yssoft/archive/2009/05/30/1492348.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值