อะไรคือกรณีที่แตกต่างกันเมื่อเราใช้ทั้งสามนี้? ฉันควรใช้ที่ไหนและไม่ควรใช้ที่ไหน?
อะไรคือกรณีที่แตกต่างกันเมื่อเราใช้ทั้งสามนี้? ฉันควรใช้ที่ไหนและไม่ควรใช้ที่ไหน?
คำตอบ:
ExecuteScalar
โดยทั่วไปจะใช้เมื่อคำค้นหาของคุณส่งกลับค่าเดียว หากส่งคืนมากกว่าผลลัพธ์จะเป็นคอลัมน์แรกของแถวแรก SELECT @@IDENTITY AS 'Identity'
ตัวอย่างเช่นอาจจะเป็นExecuteReader
ใช้สำหรับชุดผลลัพธ์ที่มีหลายแถว / คอลัมน์ (เช่นSELECT col1, col2 from sometable
)ExecuteNonQuery
โดยทั่วไปจะใช้สำหรับคำสั่ง SQL ที่ไม่มีผลลัพธ์ (เช่น UPDATE, INSERT ฯลฯ )ExecuteNonQuery
สามารถส่งคืนจำนวนแถวที่ได้รับผลกระทบ
ExecuteNonQuery ():
ExecuteReader ():
ExecuteScalar ():
URL อ้างอิง:
http://nareshkamuni.blogspot.in/2012/05/what-is-difference-between.html
แต่ละประเภทเป็นการดำเนินการประเภทต่างๆ
ExecuteScalarจะเป็นประเภทของแบบสอบถามซึ่งจะส่งคืนค่าเดียว
ตัวอย่างจะส่งคืน ID ที่สร้างขึ้นหลังจากใส่
INSERT INTO my_profile (Address) VALUES ('123 Fake St.');
SELECT CAST(scope_identity() AS int)
ExecuteReaderช่วยให้คุณสามารถอ่านข้อมูลย้อนกลับซึ่งจะช่วยให้คุณสามารถอ่านคอลัมน์ทั้งหมดของผลลัพธ์ได้ทีละแถว
ตัวอย่างจะดึงข้อมูลโปรไฟล์สำหรับผู้ใช้ตั้งแต่หนึ่งรายขึ้นไป
SELECT * FROM my_profile WHERE id = '123456'
ExecuteNonQueryคือ SQL ใด ๆ ที่ไม่คืนค่า แต่กำลังทำงานบางรูปแบบเช่นการแทรกการลบหรือแก้ไขบางสิ่ง
ตัวอย่างจะอัปเดตโปรไฟล์ของผู้ใช้ในฐานข้อมูล
UPDATE my_profile SET Address = '123 Fake St.' WHERE id = '123456'
จากเอกสาร (หมายเหตุ: MSDN เป็นแหล่งข้อมูลที่มีประโยชน์เมื่อคุณต้องการทราบว่ามีอะไรบ้าง!):
ใช้เมธอด ExecuteScalar เพื่อดึงค่าเดียว (ตัวอย่างเช่นค่ารวม) จากฐานข้อมูล สิ่งนี้ต้องการรหัสน้อยกว่าการใช้เมธอด ExecuteReader จากนั้นดำเนินการตามที่คุณต้องการเพื่อสร้างค่าเดียวโดยใช้ข้อมูลที่ส่งคืนโดย SqlDataReader
ส่ง CommandText ไปยัง Connection และสร้าง SqlDataReader
... และจากSqlDataReader ...
จัดเตรียมวิธีการอ่านสตรีมแถวไปข้างหน้าอย่างเดียวจากฐานข้อมูล SQL Server คลาสนี้ไม่สามารถสืบทอดได้
คุณสามารถใช้ ExecuteNonQuery เพื่อดำเนินการแค็ตตาล็อก (ตัวอย่างเช่นการสอบถามโครงสร้างของฐานข้อมูลหรือการสร้างวัตถุฐานข้อมูลเช่นตาราง) หรือเพื่อเปลี่ยนแปลงข้อมูลในฐานข้อมูลโดยไม่ต้องใช้ชุดข้อมูลโดยเรียกใช้คำสั่ง UPDATE, INSERT หรือ DELETE
หากต้องการเพิ่มสิ่งที่คนอื่นโพสต์:
ExecuteScalar จะส่งคืนคอลัมน์ทางซ้ายสุดในแนวความคิดจากแถวแรกของชุดผลลัพธ์จากแบบสอบถาม คุณสามารถ ExecuteScalar เจ้าหน้าที่ SELECT * FROM ได้ แต่คุณจะได้รับเฉพาะเซลล์แรกของแถวผลลัพธ์โดยทั่วไปจะใช้สำหรับการสืบค้นที่ส่งกลับค่าเดียว ฉันไม่แน่ใจ 100% เกี่ยวกับ SQLServer แต่ใน Oracle คุณwouldntใช้ในการเรียกใช้ฟังก์ชั่น (รหัสฐานข้อมูลที่ส่งกลับค่าเดียว) และคาดว่าจะให้ค่าตอบแทนของฟังก์ชั่นการทำงานแม้ว่าค่าตอบแทนเพียงครั้งเดียว อย่างไรก็ตามหากคุณกำลังเรียกใช้ฟังก์ชันเป็นส่วนหนึ่งของแบบสอบถามเช่น SELECT SUBSTR ('abc', 1, 1) FROM DUAL มันจะให้ค่าส่งคืนโดยอาศัยความจริงที่ว่าค่าที่ส่งคืนจะถูกเก็บไว้ที่ด้านบนซ้ายสุด เซลล์ของ rowset ที่เป็นผลลัพธ์
ExecuteNonQuery จะถูกใช้เพื่อเรียกใช้โพรซีเดอร์ฟังก์ชันและคิวรีที่จัดเก็บฐานข้อมูลที่แก้ไขข้อมูล (INSERT / UPDATE / DELETE) หรือแก้ไขโครงสร้างฐานข้อมูล (CREATE TABLE ... ) โดยทั่วไปค่าส่งคืนของการโทรเป็นตัวบ่งชี้จำนวนแถวที่ได้รับผลกระทบจากการดำเนินการ แต่ตรวจสอบเอกสาร DB เพื่อรับประกันสิ่งนี้
ExecuteReader()
เรียกใช้แบบสอบถาม SQL ที่ส่งคืนอ็อบเจ็กต์ DBDataReader ของผู้ให้บริการข้อมูลที่จัดเตรียมการเข้าถึงแบบไปข้างหน้าเท่านั้นและอ่านอย่างเดียวสำหรับผลลัพธ์ของคิวรี
ExecuteScalar()
คล้ายกับExecuteReader()
วิธีการที่ออกแบบมาสำหรับการสืบค้นแบบซิงเกิลตันเช่นการรับจำนวนเรกคอร์ด
ExecuteNonQuery()
ดำเนินการแบบสอบถามที่ไม่ทำงานกับการสร้างลบอัปเดตแทรก)
ExecuteNonQuery
วิธีการ ExecuteNonQuery นี้จะใช้สำหรับคำสั่งแทรกอัปเดตและลบสร้างและ SET เท่านั้น เมธอด ExecuteNonQuery จะส่งคืนจำนวนแถวที่มีผลกับการดำเนินการ INSERT, DELETE หรือ UPDATE
ExecuteScalar
การดึงค่าเดียวจากฐานข้อมูลทำได้รวดเร็วมาก Execute Scalar จะส่งคืนค่าคอลัมน์เดียวแถวเดียวคือค่าเดียวในการดำเนินการของ SQL Query หรือ Stored procedure โดยใช้ command object ExecuteReader
Execute Reader จะใช้เพื่อส่งคืนชุดของแถวในการเรียกใช้ SQL Query หรือ Stored procedure โดยใช้ command object อันนี้เป็นการดึงข้อมูลไปข้างหน้าเท่านั้นและใช้เพื่ออ่านค่าตารางตั้งแต่แรกถึงสุดท้าย
เมธอด ExecuteNonQuery จะส่งคืนจำนวนแถวที่มีผลกับการดำเนินการ INSERT, DELETE หรือ UPDATE วิธีการ ExecuteNonQuery นี้จะใช้สำหรับคำสั่งแทรกอัปเดตและลบสร้างและ SET เท่านั้น (อ่านเพิ่มเติม)
ExecuteScalar จะส่งคืนค่าคอลัมน์เดียวแถวเดียวคือค่าเดียวในการดำเนินการของ SQL Query หรือ Stored procedure โดยใช้ command object การดึงค่าเดียวจากฐานข้อมูลทำได้รวดเร็วมาก (อ่านเพิ่มเติม)
ExecuteReader จะถูกใช้เพื่อส่งคืนชุดของแถวในการดำเนินการของ SQL Query หรือ Stored procedure โดยใช้ command object อันนี้เป็นการดึงข้อมูลไปข้างหน้าเท่านั้นและใช้เพื่ออ่านค่าตารางตั้งแต่แรกถึงสุดท้าย (อ่านเพิ่มเติม)
ExecuteNonQuery: มักใช้เมื่อไม่มีสิ่งใดส่งคืนจากคำสั่ง Sql เช่นการแทรกอัปเดตลบการดำเนินการ
cmd.ExcecuteNonQuery();
ExecuteScalar:
จะใช้เมื่อแบบสอบถาม Sql ส่งกลับค่าเดียว
Int b = cmd.ExcecuteScalar();
ExecuteReader
จะใช้เมื่อแบบสอบถาม Sql หรือ Stored Procedure ส่งกลับหลายแถว / คอลัมน์
SqlDataReader dr = cmd.ExecuteReader();
สำหรับข้อมูลเพิ่มเติมคุณสามารถคลิกที่นี่http://www.dotnetqueries.com/Article/148/-difference-between-executescalar-executereader-executenonquery