您的位置:首页 > 编程语言

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

2009-07-04 17:29 651 查看
关键字: asp.net, .net, 存储过程

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



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

Sql代码



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

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#代码



using System.Data;

using System.Data.SqlClient;

using System.Data;
using System.Data.SqlClient;


④在Page_Load方法里写入如下代码:

C#代码



// 建立连接字符串,在正式项目中可放在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();

}

}

// 建立连接字符串,在正式项目中可放在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#代码



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();

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐