作者ThreeDay0905 (三天)
看板Database
標題Re: [SQL]回傳nvarchar的值(SQL Server)
時間Mon Oct 4 21:27:08 2010
※ 引述《pabeni (真兒)》之銘言:
: 問題困擾很久... ...
: 也有好心的大大幫我指點迷津...
: 不過資質駑鈍...
: 還請各位豪傑, 給我一點建議...
: 問題是這樣的~
: 要怎麼將 資料表某欄位的內容傳回給ADO端~
: 這個某欄位的內容是 "nvarchar"~~~
: 問題是這樣出現的...
: 我的資料表有一個欄位叫做steplist~
: 在MFC裡面的ADO裡會讀取 一個整數,
: 這個整數表示的是 資料表裡面的第幾筆資料~
: MFC將這個整數傳入SQL裡面~
: 然後得到那筆資料的steplist~~~
: 可是 steplist就是傳不回MFC那裡...
: 資料表的steplist 長像大概是這樣 -1, 180, 179, 168...
: 我是用SQL Server~
: 預存程序是這樣...
: set ANSI_NULLS ON
: set QUOTED_IDENTIFIER ON
: GO
: ALTER PROCEDURE [dbo].[sp_SCB]
: (@InputIndex int) //從MFC那裡傳進的資料的代碼 其實就是流水號
: AS
: BEGIN
: declare @outsteplist nvarchar(max)
: Select @outsteplist = StepList From CMR //列出steplist,
: Where RecordID = @InputIndex //當MFC得到的整數
: return @outsteplist //等於 資料表的ID
: END
在StoreProcedure裡面 有三種回傳的方式
return 我的印象中只能傳整數
告知此預存程序的執行結果是否成功 (有錯請前輩指正)
要回傳變數的話,可以將變數設為output形式
並且在ADO.NET處宣告SqlParameter的時候標示此參數為output
如此便可在執行完此預存程序後取得此變數的內容
大致的寫法為:
SQL
==================================================
ALTER PROCEDURE [dbo].[sp_SCB]
(
@InputIndex int,
@outsteplist nvarchar(max) output
)
AS
BEGIN
--在此處賦值予@outsetlist
END
ASP.NET
==================================================
SqlCommand com = new SqlCommand("sp_SCB");
com.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter[] pars = new SqlParameter[2];
pars[0] = new SqlParameter("@InputIndex", 2);
pars[1] = new SqlParameter("@outsteplist", SqlDbType.NVarChar);
pars[1].Direction = ParameterDirection.Output;
com.Parameters.AddRange(pars);
com.ExecuteNonQuery();
return pars[1].Value; //對output的值做操作
如此可使用output的方法取得回傳值
==================================================================
不過比較單純的方法其實直接在預存程序裡面
SQL
=====
BEGIN
Select StepList From CMR
Where RecordID = @InputIndex
END
ASP.NET
=======
SqlCommand com = new SqlCommand("sp_SCB");
com.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter[] pars = new SqlParameter[1];
pars[0] = new SqlParameter("@InputIndex", 2);
com.Parameters.AddRange(pars);
string szResult = com.ExecuteScalar().ToString();
直接用回傳資料行的方法取得資料就好
其實大部分向透過預存程序像資料庫要資料的時候
都是直接用Select
然後再看伺服器端要用DataSet還是用ExecuteScalar去取資料而已
以上有錯誤的地方請前輩指正
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.249.150.123
推 pabeni:先謝謝你給我的方向, ASP不等於ADO吧? 10/04 23:20
推 yumark:ASP和ADO是不同東西,可以拿本ASP.NET書看看幾都有講解ADO 10/05 00:11