Có cách nào để kiểm tra xem tôi có đang lưu hồ sơ cuối cùng không? cảm ơnKiểm tra xem đó có phải là kỷ lục cuối cùng trong sqldatareader
Trả lời
Sử dụng mô hình này để xác định và xử lý hàng cuối cùng trong kết quả:
if (reader.Read())
{
var loop = true;
while (loop)
{
//1. Here retrive values you need e.g. var myvar = reader.GetBoolean(0);
loop = reader.Read();
if (!loop)
{
//You are on the last record. Use values read in 1.
//Do some exceptions
}
else {
//You are not on the last record.
//Process values read in 1., e.g. myvar
}
}
}
Khác với "không có một số nào khác sau đó", không. Điều này có nghĩa là bạn cần phải đệm hàng, cố gắng đọc, sau đó xem xét dữ liệu đệm nếu nó bật ra là cuối cùng.
Trong nhiều trường hợp, khi dữ liệu vừa phải và bạn đang xây dựng mô hình đối tượng, bạn chỉ cần xem dữ liệu đã tạo, tức là tạo List<T>
của tất cả các hàng khi sử dụng trình đọc, sau đó , xem hàng cuối cùng trong danh sách.
Vâng, nhưng tôi không muốn vượt qua hai vòng !! – wben
@wben nếu nó nằm trong danh sách, vòng lặp là cực kỳ rẻ - hoặc chỉ truy cập bằng chỉ mục: 'list [list.Count-1]'. Tất nhiên, đệm hàng trước đó thậm chí còn rẻ hơn, nhưng phức tạp hơn. –
@wben để làm cho mọi thứ rõ ràng hơn, trong câu trả lời được chấp nhận, ở đây là nói "// 1. Ở đây retrive giá trị bạn cần ví dụ var myvar = reader.GetBoolean (0);", đó là những gì tôi/chúng tôi có nghĩa là "đệm hàng, cố gắng đọc, sau đó xem xét dữ liệu đệm nếu nó bật ra là cuối cùng ". Ví dụ mã làm cho nó rõ ràng hơn, tất nhiên. –
Như bạn biết, SQLDataReader không có thuộc tính "số lượng hàng". Bạn chỉ cần đọc cho đến khi EOF.
Tuy nhiên, Số liệu hiện. Có lẽ bạn có thể thay thế một DataAdapter và một số loại tập dữ liệu hoặc bảng:
Để lặp qua SqlDataReader
:
SqlDataReader reader = ...;
while(reader.Read())
{
// the reader will contain the current row
}
Không có gì khi kể người đọc là bạn là hàng cuối cùng. Nếu bạn vẫn cần phải nhận được trên hàng cuối cùng, có lẽ lưu trữ dữ liệu của hàng trong một biến riêng biệt, bạn có thể nhận được dữ liệu đó sau khi thoát khỏi vòng lặp.
lựa chọn thay thế khác sẽ là:
- để có được các dữ liệu vào một DataSet/DataTable
- để lưu trữ dữ liệu trong một danh sách/mảng
- lấy dữ liệu theo thứ tự ngược (viết lại truy vấn của bạn) , để hàng đầu tiên là hàng bạn muốn.
trình đọc không phải là một điều tra viên mà nó không có MoveNext(). Trước tiên, bạn cần yêu cầu điều tra viên, tức là reader.GetEnumerator() –
@RamanZhylich: Bạn nói đúng. Nó phải là reader.Read(). Đã sửa! (sửa bài viết) –
Một khả năng khác là đặt thông tin vào tập dữ liệu.
Bạn đang đọc dữ liệu bằng truy vấn. Hãy gọi nó là q. Sử dụng truy vấn này để thay thế:
select row_number() over (order by (select NULL)) as seqnum,
count(*) over (partition by null) as numrecs
q.*,
from (<q>) q
order by seqnum
Bây giờ kỷ lục cuối cùng có SEQNUM = numrecs, mà bạn có thể kiểm tra trong ứng dụng của bạn.
Nhân tiện, điều này giả định rằng bạn đang truy xuất dữ liệu theo cách không theo thứ tự. Nếu bạn muốn đặt hàng, hãy đặt tiêu chí trong mệnh đề "order by" cho row_number().
Bạn không thể làm điều đó mà không lặp lại chính mình ví dụ: lấy kỷ lục hai lần.Dưới đây là một phương pháp ngắn
System.Data.DataTable dt = new System.Data.DataTable();
dt.Load(myDataReader);
int recordCount = dt.Rows.Count;
if(recordCount > 0)
{
if(dt.Rows[recordCount-1]["username"] == "wrong value")
throw new Exception("wrong value");
}
tôi đã viết này off-hand vì vậy nó không được thử nghiệm nhưng đó là cách tiếp cận
- 1. Kiểm tra xem một khóa có phải là phần tử cuối cùng trong một mảng không?
- 2. php kiểm tra xem ký tự cuối cùng có phải là '/' nếu không sau đó gắn nó trên
- 3. Kiểm tra xem kỷ lục tương tự tồn tại trong cửa hàng để tránh trùng lặp
- 4. Kiểm tra xem đây có phải là
- 5. thuyết - kiểm tra xem kỷ lục tồn tại dựa trên lĩnh vực
- 6. So sánh ghi vào kỷ lục trước đó trong postgresql
- 7. Kiểm tra xem một cái gì đó có phải là một lớp trong javascript
- 8. Kiểm tra xem trang có phải là trang gốc hay trang đó là trang con không?
- 9. Kiểm tra xem ngày tháng có là cuối tuần PHP
- 10. Kiểm tra xem biến có phải là ngày có Twig
- 11. PHP kiểm tra xem tệp có phải là hình ảnh
- 12. Kiểm tra xem đối tượng Ruby có phải là Boolean
- 13. Kiểm tra xem luồng có phải là tệp zip
- 14. Kiểm tra xem NSURL có phải là Tệp cục bộ
- 15. Trong Python, làm thế nào để kiểm tra xem một dòng là cuối cùng?
- 16. Chèn hoặc cập nhật nếu kỷ lục là trong bảng
- 17. Cách kiểm tra xem java.lang.reflect.Type có phải là Enum
- 18. Kiểm tra xem một chuỗi có phải là số
- 19. Kiểm tra xem loại biến có phải là nguyên thủy
- 20. Kiểm tra xem char có phải là một dòng mới
- 21. Kiểm tra xem hình ảnh có phải là JPEG
- 22. Chức năng kiểm tra xem chuỗi có phải là ngày
- 23. Cách kiểm tra xem tệp có phải là hình ảnh
- 24. C#: Kiểm tra xem loại T có phải là bool
- 25. Kiểm tra xem có phải là một đối tượng
- 26. Kiểm tra xem cửa sổ có phải là MessageBox
- 27. Ruby: Kiểm tra xem URI có phải là HTTPS không?
- 28. Làm cách nào để kiểm tra xem một đoạn Word có phải là một phần của Mục lục không?
- 29. Chọn kỷ lục LAST THỨ HAI trong mỗi nhóm
- 30. Kiểm tra đơn vị - đặt một SqlDataReader
Chỉ cần tò mò, tại sao bạn cần điều đó? – codingbiz
Tôi muốn thực hiện một số trường hợp ngoại lệ nếu tôi có hồ sơ cuối cùng !! – wben