2011年12月2日 星期五
ADO.NET Command 及 DataReader 配合 DB Server Stored Procedure 作法
Q : 如何取得資料表的記錄總筆數,並傳回資料表記錄內容?
--------------------------
如果你想要取得DataReader,又要馬上知道所有的列數,
建議你可以利用Stored Procedure的方式達成。
以下為範例:
Create PROCEDURE MyJob_sp_ReturnMyData
(
@UserName varchar(20),
@TotalRecs int output
)
AS
Select * From MyTableName Where UserName = @UserName
Select @TotalRecs = Count(0) From MyTaleName Where UserName = @UserName
然後我們在前端可以這樣做:
//建立Command物件
OleDbCommand cmd = new ("MyJob_sp_ReturnMyData", DBConnstr);
cmd.CommandType = CommandType.StoredProcedure; // 這邊請注意要設定
//加入參數
OleDbParameter paUserName = new OleDbParameter("@UserName", OleDbType.VarChar, 20);
OleDbParameter paTotalCount = new OleDbParameter("@TotalRecs" , OleDbType.integer);
paTotalCount.Direction = ParameterDirection.Output; //這邊請注意要設定
paUserName.Value = "David";
cmd.Parameters.Add(paUserName);
cmd.Parameters.Add(paTotalCount);
//執行
int TotalCount = 0;
try
{
OleDbDataReader dr = cmd.ExecuteRader();
TotalCount = paTotalCount.Value; //取得輸出的列數
}
catch
{
// do something
}
finally
{
//do something like closing conntion and datareader
}
--------------------------
或者 全改用 DataReader 在前端處理:
因為 DataReader 是順向游標 , 無法回到最前面 .
你要把 DataReader 關掉再 ExecuteReader() 一次 .
以下是我的程式內容,需ExecuteReader()兩次,Close()兩次,
第一次取得筆數,第二次將資料(書本名稱)傳入字串陣列
'取得所有書名資料'
Dim myReader As SqlDataReader = sqlCmd.ExecuteReader()
'取得所有列數'
Dim i As Integer = 0
While myReader.Read()
i += 1
End While
myReader.Close()
'將資料(書本名稱)傳入字串陣列'
myReader = sqlCmd.ExecuteReader()
Dim jj(i - 1) As String
i = 0
While myReader.Read()
jj(i) = myReader.GetString(1)
i += 1
End While
myReader.Close()
sqlCN.Close()
--------------------------
節錄來源:http://www.programmer-club.com.tw/showSameTitleN/aspdotnet/9608.html
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言