2011-07-18 40 views
6

Có cách nào để nhận tổng số hàng được trả lại từ truy vấn SQL (từ IDataReader) trước khi lặp qua các hàng bằng cách sử dụng reader.Read(); không?IDataReader - Bất kỳ cách nào để nhận tổng số hàng?

+0

@sll: Tham chiếu bạn trỏ đến không còn hợp lệ. – michael

+0

Cập nhật liên kết, Xem [cách lấy số hàng bằng SqlDataReader trong C#] (http://stackoverflow.com/q/1383315/485076) – sll

Trả lời

9

No.

IDataReader là chế độ xem chỉ đơn giản về kết quả; nó không thể đếm được.

3

Không, trình quản lý dữ liệu sẽ không trả về số đầu tiên. Tuy nhiên, nếu bạn cần làm điều đó, hãy sử dụng hai truy vấn trả lại nhiều tập kết quả.

ví dụ như trong SQL Server:

sql = "Select count (*) từ A; Select * from A;"

iterate tập kết quả. Sử dụng bộ dữ liệu trên tập kết quả thứ hai.

Máy chủ cơ sở dữ liệu có thể thực hiện điều này khá nhanh nếu nó đang sử dụng các chỉ mục phù hợp.

0

Số lượng hàng được tính chỉ khi bạn đọc DataReader nhưng tôi không hiểu, tại sao bạn muốn biết các hàng đếm trước khi đọc.

+0

Để phân bổ chính xác số lượng lưu trữ hoàn hảo cần thiết nếu lưu trữ một bản sao của toàn bộ kết quả set (thay vì, ví dụ, cho phép [List (T) .Add()] (http://msdn.microsoft.com/en-us/library/3wcytfd1) tự động tăng [Capacity] của nó (http: // msdn .microsoft.com/vi-us/library/y52x03h2) thường xuyên). – binki

+0

Đó là điều hiển nhiên nhất tôi từng nghĩ đến. Một trường hợp sử dụng khác là cập nhật thanh tiến trình xác định trong khi đọc các hàng. Một MIGHT khác là đầu vào để tìm hiểu cách xử lý các hàng (nghĩa là, bạn có thể muốn xử lý 100 hàng khác với cách bạn xử lý 10 triệu hàng và có thể là một cơn đau để chuyển đổi giữa chừng). Có lẽ cũng có nhiều lý do chính đáng khác. –

3

Cũng qua ngày đăng nhưng có một cách, mà làm việc cho tôi mất một thời gian để có được bởi vì tôi hút tại từ ngữ tìm kiếm google của tôi.

dbCommand.Connection.Open(); 
//dbReader = dbCommand.ExecuteReader(); I left this here to show not to do the read 

searchCount = dbCommand.ExecuteScalar(); // this line returns the value count 
             // from my tests on my reader it works perfectly 
+0

Điều này không đòi hỏi hai sự thực thi riêng biệt, có nghĩa là nó có thể dễ bị tổn thương trong điều kiện chủng tộc nếu ai đó thay đổi thứ gì đó giữa gọi ExecuteScalar() (để lấy số đếm) và gọi ExecuteReader() (để tự lấy các hàng)? –

Các vấn đề liên quan