??? 在網(wǎng)上也找到許多關(guān)于.NET中使用存儲過程獲取輸出參數(shù)的代碼,但怎么看怎么都是記不住,還是自己親自實踐一遍后再記錄下來,這樣才能記得住,必竟自己做過的東西是比較難忘記的!!!
??? 步驟如下:
??? ①建立數(shù)據(jù)庫logintest,在數(shù)據(jù)庫中建立表User.
???? 向建立的表中添加幾條測試數(shù)據(jù).
??? ②在數(shù)據(jù)庫中建立存儲過程:
??? ③在VS中建立一個測試頁面ProcTest.aspx,在ProcTest.aspx.cs中導(dǎo)入命名空間
??? ④在Page_Load方法里寫入如下代碼:
??? 運行ASPX頁面,則能夠看到執(zhí)行存儲過程后返回的結(jié)果!
??? 需要注意的是如果輸出參數(shù)是varchar類型的話則必須定義長度,否則會出錯,如果輸出參數(shù)是數(shù)字型的話就不必定義長度了!
??? 下面是完整的ProcTest.aspx.cs的源碼:
??? 步驟如下:
??? ①建立數(shù)據(jù)庫logintest,在數(shù)據(jù)庫中建立表User.
???? 向建立的表中添加幾條測試數(shù)據(jù).
??? ②在數(shù)據(jù)庫中建立存儲過程:
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中導(dǎo)入命名空間
using System.Data;
using System.Data.SqlClient;
??? ④在Page_Load方法里寫入如下代碼:
// 建立連接字符串,在正式項目中可放在web.config中
string connStr = "server=niunan\\sqlexpress;uid=sa;pwd=123456;database=logintest";
// 連接數(shù)據(jù)庫
SqlConnection conn = new SqlConnection(connStr);
try
{
// 打開數(shù)據(jù)庫連接
conn.Open();
// 創(chuàng)建用于執(zhí)行數(shù)據(jù)庫操作的命令對象, GetUNameById為存儲過程名稱
SqlCommand cmd = new SqlCommand("GetUNameById", conn);
// 設(shè)置執(zhí)行命令的方式為存儲過程
cmd.CommandType = CommandType.StoredProcedure;
// 向命令對象添加存儲過程所需要的參數(shù)
cmd.Parameters.Add("@uid", SqlDbType.Int);
// 設(shè)置要傳入到存儲過程的參數(shù)值
cmd.Parameters["@uid"].Value = 2;
// 添加存儲過程中的輸出參數(shù),如果是字符型的必須定義長度
cmd.Parameters.Add("@name", SqlDbType.VarChar, 50);
// 設(shè)置參數(shù)為output輸出參數(shù)
cmd.Parameters["@name"].Direction = ParameterDirection.Output;
// 執(zhí)行存儲過程
cmd.ExecuteReader();
// 獲取執(zhí)行存儲過程后的輸出參數(shù)
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頁面,則能夠看到執(zhí)行存儲過程后返回的結(jié)果!
??? 需要注意的是如果輸出參數(shù)是varchar類型的話則必須定義長度,否則會出錯,如果輸出參數(shù)是數(shù)字型的話就不必定義長度了!
??? 下面是完整的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";
// 連接數(shù)據(jù)庫
SqlConnection conn = new SqlConnection(connStr);
try
{
// 打開數(shù)據(jù)庫連接
conn.Open();
// 創(chuàng)建用于執(zhí)行數(shù)據(jù)庫操作的命令對象, GetUNameById為存儲過程名稱
SqlCommand cmd = new SqlCommand("GetUNameById", conn);
// 設(shè)置執(zhí)行命令的方式為存儲過程
cmd.CommandType = CommandType.StoredProcedure;
// 向命令對象添加存儲過程所需要的參數(shù)
cmd.Parameters.Add("@uid", SqlDbType.Int);
// 設(shè)置要傳入到存儲過程的參數(shù)值
cmd.Parameters["@uid"].Value = 2;
// 添加存儲過程中的輸出參數(shù)
cmd.Parameters.Add("@name", SqlDbType.VarChar, 50);
// 設(shè)置參數(shù)為output輸出參數(shù)
cmd.Parameters["@name"].Direction = ParameterDirection.Output;
// 執(zhí)行存儲過程
cmd.ExecuteReader();
// 獲取執(zhí)行存儲過程后的輸出參數(shù)
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();
}
}
}
}
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

