http://niunan.javaeye.com/category/42319
在网上也找到许多关于.NET中使用存储过程获取输出参数的代码,但怎么看怎么都是记不住,还是自己亲自实践一遍后再记录下来,这样才能记得住,必竟自己做过的东西是比较难忘记的!!!
步骤如下:
①建立数据库logintest,在数据库中建立表User.
向建立的表中添加几条测试数据.
②在数据库中建立存储过程:
- 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中导入命名空间
- using System.Data;
- using System.Data.SqlClient;
④在Page_Load方法里写入如下代码:
- // 建立连接字符串,在正式项目中可放在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的源码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Data;
- using System.Data.SqlClient;
- public partial class ProcTest : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- // 建立连接字符串,在正式项目中可放在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();
- }
- }
- }
- }