2010-05-14 45 views
15

Tôi biết đây không phải là một câu hỏi hữu ích nhưng tôi không thể không bị làm phiền bởi nó.Tại sao "Không" trong "ExecuteNonQuery"?

Vì vậy,
Tại sao nói phương pháp (trong *Command lớp) được gọi
ExecuteNonQuery thay vì ExecuteQuery?

Không phải là những câu lệnh SQL mà chúng tôi ném vào DB, truy vấn?

Trả lời

15

Ngữ nghĩa, một truy vấn là một cái gì đó bạn thực hiện để trả lại dữ liệu. Bạn đang 'truy vấn' cơ sở dữ liệu để tìm tất cả X trong Y.

Nếu bạn không mong đợi kết quả, nó không phải là một truy vấn vì nó là một câu lệnh hoặc lệnh.

+0

Nhưng nó có thể là một CHỌN. Vậy tại sao không chỉ "myCommand.Execute()"? –

+0

@Camilo: Bởi vì có ExecuteReader() sẽ trả lại kết quả truy vấn của bạn, hoặc thậm chí ExecuteScalar(), cho các kết quả có giá trị đơn lẻ. –

+0

Cảm ơn, tôi không biết về ExecuteScalar :) –

1

Không nếu họ chèn, xóa, Tạo bảng vv

+0

Nhưng phương pháp ** có thể ** thực hiện truy vấn (nghĩa là, SELECT) không nên được gọi là ExecuteNonQuery. Đó là những gì làm phiền tôi. –

+2

Nó * có thể * thực hiện một 'SELECT', nhưng không có điểm nào bằng cách sử dụng' ExecuteNonQuery' với 'SELECT', bởi vì nó không thực sự trả về kết quả. –

+2

@Camilo các lớp DB không biết nếu bạn cần một phản ứng rõ ràng nói với đối tượng DB mà bạn không mong đợi bất cứ điều gì trở lại làm cho căn phòng để tối ưu hóa. Bạn là dev có thể không muốn bất cứ điều gì trở lại bởi một tuyên bố chọn (chọn * vào ... cho một) –

0

Tôi sẽ coi đó là truy vấn đang yêu cầu cơ sở dữ liệu lưu lại hồ sơ. Các hành động làm thay đổi dữ liệu/cơ sở dữ liệu sẽ không phải là một truy vấn.

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