Câu trả lời:
ExecuteScalar
thường được sử dụng khi truy vấn của bạn trả về một giá trị duy nhất. Nếu nó trả về nhiều hơn, thì kết quả là cột đầu tiên của hàng đầu tiên. Một ví dụ có thể là SELECT @@IDENTITY AS 'Identity'
.ExecuteReader
được sử dụng cho bất kỳ tập hợp kết quả nào có nhiều hàng / cột (ví dụ SELECT col1, col2 from sometable
:).ExecuteNonQuery
thường được sử dụng cho các câu lệnh SQL không có kết quả (ví dụ: UPDATE, INSERT, v.v.).ExecuteNonQuery
có thể trả về số hàng bị ảnh hưởng.
ExecuteNonQuery ():
ExecuteReader ():
ExecuteScalar ():
URL tham chiếu:
http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html
Mỗi cái là một kiểu thực thi khác nhau.
ExecuteScalar sẽ là loại truy vấn sẽ trả về một giá trị duy nhất.
Một ví dụ sẽ trả về một id được tạo sau khi chèn.
INSERT INTO my_profile (Address) VALUES ('123 Fake St.');
SELECT CAST(scope_identity() AS int)
ExecuteReader cung cấp cho bạn một trình đọc dữ liệu, cho phép bạn đọc tất cả các cột của kết quả cùng một lúc.
Một ví dụ sẽ là lấy thông tin hồ sơ cho một hoặc nhiều người dùng.
SELECT * FROM my_profile WHERE id = '123456'
ExecuteNonQuery là bất kỳ SQL nào không trả về giá trị, nhưng thực sự đang thực hiện một số dạng công việc như chèn xóa hoặc sửa đổi thứ gì đó.
Một ví dụ sẽ là cập nhật hồ sơ của người dùng trong cơ sở dữ liệu.
UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'
Từ các tài liệu (lưu ý: MSDN là một tài nguyên hữu ích khi bạn muốn biết mọi thứ hoạt động!):
Sử dụng phương thức ExecuteScalar để truy xuất một giá trị (ví dụ: giá trị tổng hợp) từ cơ sở dữ liệu. Điều này yêu cầu ít mã hơn so với sử dụng phương thức ExecuteReader, sau đó thực hiện các thao tác mà bạn cần để tạo ra một giá trị duy nhất bằng cách sử dụng dữ liệu được trả về bởi một SqlDataReader.
Gửi CommandText tới Connection và tạo một SqlDataReader.
... và từ SqlDataReader ...
Cung cấp cách đọc luồng hàng chỉ chuyển tiếp từ cơ sở dữ liệu SQL Server. Lớp này không thể được thừa kế.
Bạn có thể sử dụng ExecuteNonQuery để thực hiện các hoạt động danh mục (ví dụ: truy vấn cấu trúc của cơ sở dữ liệu hoặc tạo các đối tượng cơ sở dữ liệu như bảng) hoặc để thay đổi dữ liệu trong cơ sở dữ liệu mà không sử dụng DataSet bằng cách thực thi các câu lệnh UPDATE, INSERT hoặc DELETE.
Để thêm vào những gì người khác đã đăng:
ExecuteScalar trả về một cách khái niệm cột ngoài cùng bên trái từ hàng đầu tiên của tập kết quả từ truy vấn; bạn có thể ExecuteScalar một nhân viên SELECT * FROM, nhưng bạn chỉ nhận được ô đầu tiên của các hàng kết quả Thường được sử dụng cho các truy vấn trả về một giá trị duy nhất. Tôi không chắc chắn 100% về SQLServer nhưng trong Oracle, bạn wouldnt sử dụng nó để chạy một CHỨC NĂNG (mã cơ sở dữ liệu trả về một giá trị duy nhất) và hy vọng nó sẽ cung cấp cho bạn giá trị trả về của hàm mặc dù chức năng trả về giá trị duy nhất. . Tuy nhiên, nếu bạn đang chạy hàm như một phần của truy vấn, ví dụ: SELECT SUBSTR ('abc', 1, 1) FROM DUAL thì nó sẽ cung cấp giá trị trả về do thực tế là giá trị trả về được lưu trữ ở trên cùng bên trái ô của tập hàng kết quả
ExecuteNonQuery sẽ được sử dụng để chạy các thủ tục, hàm và truy vấn được lưu trữ trong cơ sở dữ liệu để sửa đổi dữ liệu (CHÈN / CẬP NHẬT / XÓA) hoặc sửa đổi cấu trúc cơ sở dữ liệu (TẠO BẢNG ...). Thông thường, giá trị trả về của lệnh gọi là dấu hiệu cho biết có bao nhiêu hàng bị ảnh hưởng bởi hoạt động nhưng hãy kiểm tra tài liệu DB để đảm bảo điều này
ExecuteReader()
thực thi truy vấn SQL trả về đối tượng DBDataReader của nhà cung cấp dữ liệu cung cấp quyền truy cập chỉ chuyển tiếp và chỉ đọc cho kết quả của truy vấn.
ExecuteScalar()
tương tự như ExecuteReader()
phương thức được thiết kế cho truy vấn singleton chẳng hạn như thu được số lượng bản ghi.
ExecuteNonQuery()
thực thi truy vấn không hoạt động với tạo, xóa, cập nhật, chèn)
ExecuteNonQuery
Phương thức ExecuteNonQuery này sẽ chỉ được sử dụng cho các câu lệnh chèn, cập nhật và xóa, Tạo và SET. Phương thức ExecuteNonQuery sẽ trả về số hàng được thực hiện bằng các thao tác INSERT, DELETE hoặc UPDATE.
ExecuteScalar
Rất nhanh để lấy các giá trị đơn lẻ từ cơ sở dữ liệu. Thực thi Scalar sẽ trả về giá trị cột đơn hàng đơn tức là giá trị đơn, khi thực hiện Truy vấn SQL hoặc thủ tục Đã lưu trữ bằng đối tượng lệnh. ExecuteReader
Execute Reader sẽ được sử dụng để trả về tập hợp các hàng khi thực hiện Truy vấn SQL hoặc thủ tục Đã lưu trữ bằng đối tượng lệnh. Cái này chỉ chuyển tiếp truy xuất các bản ghi và nó được sử dụng để đọc các giá trị bảng từ đầu tiên đến cuối cùng.
Phương thức ExecuteNonQuery sẽ trả về số hàng được thực hiện bằng các thao tác INSERT, DELETE hoặc UPDATE. Phương thức ExecuteNonQuery này sẽ chỉ được sử dụng cho các câu lệnh chèn, cập nhật và xóa, Tạo và SET. (Đọc thêm)
ExecuteScalar sẽ trả về giá trị cột đơn hàng đơn tức là giá trị đơn, khi thực hiện Truy vấn SQL hoặc thủ tục Đã lưu trữ bằng đối tượng lệnh. Rất nhanh để lấy các giá trị đơn lẻ từ cơ sở dữ liệu. (Đọc thêm)
ExecuteReader sẽ được sử dụng để trả về tập hợp các hàng khi thực hiện Truy vấn SQL hoặc thủ tục Đã lưu trữ bằng đối tượng lệnh. Cái này chỉ chuyển tiếp truy xuất các bản ghi và nó được sử dụng để đọc các giá trị bảng từ đầu tiên đến cuối cùng. (Đọc thêm)
ExecuteNonQuery: thường được sử dụng khi không có gì trả về từ các câu lệnh Sql như các thao tác chèn, cập nhật, xóa.
cmd.ExcecuteNonQuery();
ExecuteScalar:
Nó sẽ được sử dụng khi truy vấn Sql trả về một giá trị duy nhất.
Int b = cmd.ExcecuteScalar();
ExecuteReader
Nó sẽ được sử dụng khi truy vấn Sql hoặc Thủ tục đã lưu trữ trả về nhiều hàng / cột
SqlDataReader dr = cmd.ExecuteReader();
để biết thêm thông tin, bạn có thể nhấp vào đây http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery