http://niunan.javaeye.com/category/42319
在網上也找到許多關於.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 ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[GetUNameById]@uid int,@name varchar(50) outputASBEGINselect @name=uname from [User] where uid=@uidEND
③在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();
- }
- }
- }
- }