जैसा कि हारून द्वारा सुझाया गया है, एक संग्रहित प्रक्रिया इसे तेज कर देगी क्योंकि यह एसक्यूएल सर्वर को आपके एसक्यूएल बैच को संकलित करने का काम बचाता है। हालाँकि, आप अभी भी किसी भी दृष्टिकोण के साथ जा सकते हैं:ExecuteScalar
या ExecuteNonQuery
. आईएमएचओ, उनके बीच प्रदर्शन अंतर इतना छोटा है कि कोई भी विधि "उचित" है।
ऐसा कहने के बाद, मुझे ExecuteScalar
. का उपयोग करने का मतलब नहीं दिख रहा है यदि आप आउटपुट पैरामीटर से पहचान मान प्राप्त कर रहे हैं। उस स्थिति में, ExecuteScalar
. द्वारा लौटाया गया मान बेकार हो जाता है।
एक दृष्टिकोण जो मुझे पसंद है क्योंकि इसके लिए कम कोड की आवश्यकता होती है, ExecuteScalar
. का उपयोग करता है आउटपुट पैरामीटर के बिना:
public static int SaveTest(Test newTest)
{
var conn = DbConnect.Connection();
const string sqlString = "INSERT INTO dbo.Tests ( Tester , Premise ) " +
" VALUES ( @tester , @premise ) " +
"SELECT SCOPE_IDENTITY()";
using (conn)
{
using (var cmd = new SqlCommand(sqlString, conn))
{
cmd.Parameters.AddWithValue("@tester", newTest.tester);
cmd.Parameters.AddWithValue("@premise", newTest.premise);
cmd.CommandType = CommandType.Text;
conn.Open();
return (int) (decimal) cmd.ExecuteScalar();
}
}
}
हैप्पी प्रोग्रामिंग!
संपादित करें :ध्यान दें कि हमें दो बार कास्ट करने की आवश्यकता है:ऑब्जेक्ट से decimal
. तक , और फिर int
. पर (इसे नोट करने के लिए टेकटर्टल को धन्यवाद)।