使用SqlParameter引數返回值時遇到的問題
原來早就知道可以在呼叫SQL Server的儲存過程,並指定引數的型別為ParameterDirection.Output來返回值,但是今天真正用起來的時候卻碰到了問題,
儲存過程:
CREATE procedure SqlMembership_GetAllUsers
(@ApplicationName VarChar(255),
@pagesize int,
@pageindex int,
@totalrecords int OUTPUT)
as
select @totalrecords = count(id) from SqlMembership_Users where [email protected]
declare @indextable table(id int identity(1,1),nid int)
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @[email protected][email protected]
set rowcount @PageUpperBound
insert into @indextable(nid) select id from SqlMembership_Users where [email protected]
select O.* from SqlMembership_Users O,@indextable t where O.id=t.nid
and t.id>@PageLowerBound and t.id<[email protected] order by t.id
呼叫程式碼:
MembershipUserCollection members = new MembershipUserCollection();
SqlDataReader dr;
try
{
SqlCommand cmd = new SqlCommand("SqlMembership_GetAllUsers",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ApplicationName",SqlDbType.VarChar,255).Value = this.applicationName;
cmd.Parameters.Add("@PageIndex",SqlDbType.Int).Value = pageIndex;
cmd.Parameters.Add("@PageSize",SqlDbType.Int).Value = pageSize;
SqlParameter parm = new SqlParameter("@totalrecords",SqlDbType.Int);
parm.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parm);
conn.Open();
dr = cmd.ExecuteReader();
while( dr.Read() )
{
members.Add(MembershipUserFromReader(dr));
}
if( dr != null)
{
dr.Close();
}
totalRecords = (int) parm.Value;
}
catch
{
throw;
}
finally
{
conn.Close();
}
return members;
剛開始把紅色標出的那句話放在 dr.Close之前,結果一直不能得到返回的值,最後查了一下 DataReader.Close方法才恍然大悟:
MSDN:
Close 方法將填寫輸出引數的值、返回值和 RecordsAffected,從而增加了關閉用於處理大型或複雜的查詢的 SqlDataReader 所用的時間。如果返回值和查詢影響的記錄的數量不重要,則可以在呼叫 Close 方法前呼叫關聯的 SqlCommand 物件的 Cancel 方法,從而減少關閉 SqlDataReader 所需的時間。
看來還是實踐欠缺了一點啊
相關推薦
使用SqlParameter引數返回值時遇到的問題
原來早就知道可以在呼叫SQL Server的儲存過程,並指定引數的型別為ParameterDirection.Output來返回值,但是今天真正用起來的時候卻碰到了問題, 儲存過程: CREATE procedure SqlMembership_GetAllUsers(@Ap
python_day08_函式引數/返回值
簡單函式 def ss(x,y): rex = x**y print(rex) ss(2,10) 引數 x,y 讓函式更靈活,讓引數決定函式內部執行流程 ① 形參變數: 只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元. 因此,形參只在函式內部有效
Python 4.函式引數 返回值與文件檢視(基礎篇)
本章大綱:(以後文筆格式都會在開頭有個大綱) -五大引數- 普通引數 預設引數 關鍵
14_Java面向物件_第14天(Eclipse高階、類與介面作為引數返回值)_講義
今日內容介紹 1、Eclipse常用快捷鍵操作 2、Eclipse文件註釋匯出幫助文件 3、Eclipse專案的jar包匯出與使用jar包 4、不同修飾符混合使用細節 5、辨析何時定義變數為成員變數 6、類、抽象類、介面作為方法引數 7、類、抽象類、介面作為方法
java中使用mybatis呼叫儲存過程,拿到返回值(單引數返回值)
service業務層呼叫dao層 注意:返回值直接從物件裡獲取 不需要拿物件接收再獲取 dao.uspGetUser(userPO);//物件封裝了儲存過程的入參和出參 count = userPO.getCount(); //count 是儲存過程的返回值 dao層介面 pu
關於sqlhelper呼叫儲存過程和獲取引數返回值
SQLHelper類給我們操作資料庫提供了便利,有些人說,SqlHelper類執行儲存過程無法獲取引數的返回值,這個認識是錯誤的。 SqlHelper類呼叫儲存過程的方法有下面類似的兩種型別:public static int ExecuteNonQuery(string connectionString,
Sql Server 儲存過程呼叫儲存過程接收輸出引數,返回值
CREATE PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[
使用ajax得到返回值時執行順序問題
今天想利用JQuery框架ajax寫一個工具方法,引數分別為ajax請求傳送的地址和引數。可以供應用程式的多個模組直接呼叫,當然了,需要有一個json格式的返回值。程式碼如下: function getDate(uri,param){ var list; $.ajax(
【C/C++開發】類物件作為返回值時析構的情況說明
class Person { public: string name; public: Person() { name = "ttf"; } ~Person(){ cout << this->
函式引數返回值 void 和 void *
void的字面意思是“無型別”,向函式傳遞void引數,可等價理解為函式為無引數傳遞; void *則為“無型別指標”,void *可以指向任何型別的資料,如果一個函式引數為該種形式,說明呼叫方向該函式傳遞了一個指標,這個指標指向一個任何型別的引數。 其實這是泛型指標,也即無
Java基礎---Java中帶引數返回值方法的使用(四十)
Java 中帶參帶返回值方法的使用如果方法既包含引數,又帶有返回值,我們稱為帶參帶返回值的方法。例如:下面的程式碼,定義了一個 show 方法,帶有一個引數 name ,方法執行後返回一個 String 型別的結果呼叫帶參帶返回值的方法:執行結果:程式碼:import jav
.net js前臺呼叫後臺帶引數返回值的方法
cs public string CsName(string name) { name = "您好" + name; return name; } aspx <script type="text/javascript
在建立帶輸出引數和返回值的儲存過程時---犯下的一個低階錯誤
錯誤如圖,怎麼執行都沒有自己想要的效果(return掉了,還有個啥???!!!) 處理後: if exists(select * from sysobjects where name='usp_AllPmsTest') drop proc usp_AllPmsTest go c
當返回值為json字符串時 如何獲得其中的json數組
int str 數據 bsp i++ 格式 ++ time 如何 json數據格式 {"IPPORT":"192.168.0.12","time":"2017-04-05 09:12:06","oper":"01","data":[{"paramUnit":"℃"
springboot中處理mybatis返回Map時key值的大小寫
不一致 ole ios cat catch case time res 自定義 為了統一不同數據庫返回key值大小寫不一致的問題,特自定義ObjectWrapperFactory來做統一的處理 1,首先自定義MapWrapper /** * 將Map的key全部轉換為小寫
返回值過長時被nginx截斷的解決辦法
pen 過大 ons ext color buffer sed size fig 今天在寫接口時碰到了這個問題,返回json格式的數據,但是被截斷了經過排查,才發現是數據過大超出緩沖區最大容量,而將數據寫入臨時文件時又沒有權限,所以再返回時,超出緩沖區的數據將丟失解決方法:
Ajax詳解及使用Ajax時的返回值類型有哪些?
itl use text 數據 .ajax ack 部分 $.ajax llb Ajax詳解 Ajax = 異步 JavaScript 和 XML。 Ajax 是一種用於創建快速動態網頁的技術。 通過在後臺與服務器進行少量數據交換,A
Python小白學習之路(十)—【函式】【函式返回值】【函式引數】
寫在前面: 昨天早睡之後,感覺今天已經恢復了百分之八十的樣子 又是活力滿滿的小夥郭 今日份雞湯: 我始終相信,在這個世界上,一定有另一個自己,在做著我不敢做的事,在過著我想過的生活。-------宮崎駿 函式 一、函數出現的背景 在學習函式之前,一直遵循:面向過程程式設計,即:根據業務邏輯從上到
定義一個帶參的巨集,使兩個引數的值互換,並寫出程式,輸入兩個數作為使用巨集時的實參。輸出已交換後的兩個值。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanne
Python_從零開始學習_(32) 函式引數和返回值
目錄 1. 函式引數和返回值的作用 2. 函式的返回值 進階 3. 函式的引數 進階 1. 函式引數和返回值的作用 函式根據 有沒有引數 以及 有沒有返回值 , 可以 相互相合, 一共有