SELECT sql कथन के लिए ExecuteNonQuery के बाद लौटाई गई कोई पंक्तियों की जांच कैसे करें कोई पंक्ति नहीं देता है ??SELECT sql कथन के लिए ExecuteNonQuery कोई पंक्तियां वापस नहीं
उत्तर
ExecuteNonQuery Method
INSERT
, UPDATE
या DELETE
से प्रभावित पंक्तियों की संख्या देता है। इस विधि का उपयोग पहले बताए गए डीएमएल (डेटा मैनिपुलेशन भाषा) कथन करने के लिए किया जाना है।
ExecuteReader Method
SELECT
के परिणाम सेट को वापस कर देगा। इस विधि का उपयोग तब किया जाना चाहिए जब आप परिणामों के समूह के लिए पूछताछ कर रहे हों, जैसे तालिका से पंक्तियां, देखें, जो कुछ भी हो।
ExecuteScalar Method
पहली पंक्ति में एक एकल मान लौटाएगा, SELECT
कथन से पहला कॉलम। इस विधि का उपयोग तब किया जाना चाहिए जब आप क्वेरी से केवल एक मान वापस लौटाएंगे।
संक्षेप में, यह सामान्य है कि कथन से ExecuteNonQuery विधि का उपयोग करते समय आपके पास कोई परिणाम नहीं है। इसके बजाय ExecuteReader का उपयोग करें। ExecuteReader
विधि का उपयोग करके, यह पता चल जाएगा कि SqlDataReader
ऑब्जेक्ट लौटाए गए उदाहरण के माध्यम से कितनी पंक्तियां लौटा दी गईं।
int rows = 0;
if (reader.HasRows)
while (reader.Read())
rows++;
return rows; // Returns the number of rows read from the reader.
मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है। select count(*) where
के साथ ExecuteScalar
का उपयोग करें ... अपनी मूल चयन क्वेरी के मानदंडों से मेल खाने वाली पंक्तियों की गणना करने के लिए। उदाहरण नीचे, here से दूसरे शब्दों में बयान:
using (SqlCommand thisCommand =
new SqlCommand("SELECT COUNT(*) FROM Employee", thisConnection))
{
Console.WriteLine("Number of Employees is: {0}",
thisCommand.ExecuteScalar());
}
आप के रूप में अच्छी पंक्तियों की जरूरत है, आप पहले से ही ExecuteReader
का उपयोग कर हो सकता है, मुझे लगता है।
मैं एसक्यूएल क्वेरी को इसकी गतिशील रूप से निर्मित – Lyle
इसके बजाय ExecuteReader
विधि का उपयोग करें। यह SqlDataReader
देता है, जिसमें HasRows
संपत्ति है।
ExecuteNonQuery
SELECT
कथन के लिए उपयोग नहीं किया जाना चाहिए।
यह देर हो चुकी है, लेकिन मैंने हाल ही में इस समस्या में भाग लिया और सोचा कि यह बाद में आने वाले अन्य लोगों के लिए उपयोगी होगा (जैसे मेरे) एक ही समस्या के साथ मदद चाहते हैं। वैसे भी, मेरा मानना है कि आप वास्तव में ExecuteNonQuery का उपयोग कर सकते हैं जिस तरह से आप कोशिश कर रहे हैं। लेकिन ... आपको अपनी अंतर्निहित चयन क्वेरी को संग्रहीत प्रक्रिया में समायोजित करना होगा जिसके बजाय चयन क्वेरी और आउटपुट पैरामीटर है जो पंक्ति गणना के बराबर सेट है।
के रूप में MSDN दस्तावेज में कहा गया है:
हालांकि ExecuteNonQuery कोई भी पंक्ति, किसी भी उत्पादन मानकों रिटर्न या वापसी मानकों को मैप किया मूल्यों डेटा के साथ भर जाते हैं।
यह देखते हुए, मैंने यह कैसे किया है। वैसे, अगर इसमें कोई दोष है तो मुझे विशेषज्ञों से फीडबैक पसंद आएगा, लेकिन ऐसा लगता है कि यह मेरे लिए काम करता है।
पहले, अपने संग्रहीत प्रक्रिया दो SELECT स्टेटमेंट्स होना चाहिए: आपके डेटासेट वापस जाने के लिए और दूसरा एक आउटपुट पैरामीटर से बंधा रिकॉर्ड गिनती वापस जाने के लिए:
CREATE PROCEDURE spMyStoredProcedure
(
@TotalRows int output
)
AS
BEGIN
SELECT * FROM MyTable; //see extra note about this line below.
SELECT @TotalRows COUNT(*) FROM MyTable;
END
दूसरा, इस कोड (जोड़ने vb में।नेट, एसक्यूएल कॉमांड आदि का उपयोग ..)।
Dim cn As SqlConnection, cm As SqlCommand, dr As SqlDataReader
Dim myCount As Int32
cn = New SqlConnection("MyConnectionString")
cn.Open() //I open my connection beforehand, but a lot of people open it right before executing the queries. Not sure if it matters.
cm = New SqlCommand("spMyStoredProcedure", cn)
cm.CommandType = CommandType.StoredProcedure
cm.Parameters.Add("@TotalRows", SqlDbType.Int).Direction = ParameterDirection.Output
cm.ExecuteNonQuery()
myCount = CType(cm.Parameters("@TotalRows").Value, Integer)
If myCount > 0 Then
//Do something.
End If
dr = cm.ExecuteReader()
If dr.HasRows Then
//Return the actual query results using the stored procedure's 1st SELECT statement
End If
dr.Close()
cn.Close()
dr = Nothing
cm = Nothing
cn = Nothing
यही है।
अतिरिक्त नोट। मुझे लगता है कि आप "MyCount" राशि को यह निर्धारित करने के अलावा कुछ और करने के लिए चाहते हैं कि आप लौट रहे हैं या नहीं। इसका कारण यह है कि इस विधि के साथ, आपको वास्तव में ऐसा करने की ज़रूरत नहीं है। चूंकि मैं गिनती प्राप्त करने के बाद "ExecuteReader" विधि का उपयोग कर रहा हूं, इसलिए मैं निर्धारित कर सकता हूं कि डेटा रीडर की "हैसरो" संपत्ति का उपयोग करके इच्छित डेटा सेट को वापस रखना जारी रखना है या नहीं। डेटा सेट को वापस करने के लिए, आपको एक SELECT स्टेटमेंट चाहिए जो डेटा सेट देता है, इसलिए मेरी संग्रहीत प्रक्रिया में मेरे पहले चयन कथन का कारण।
वैसे, "ExecuteNonQuery" पद्धति का उपयोग करके की इस पद्धति के बारे में अच्छी बात यह है कि आप DataReader, बंद करने से पहले इसका इस्तेमाल कुल पंक्ति से पहले गिनती DataReader बंद करने पाने के लिए कर सकते हैं (आप उत्पादन मानकों नहीं पढ़ सकते है जो यही वह है जो मैं करने की कोशिश कर रहा था, यह विधि उस के आसपास हो जाती है)। मुझे यकीन नहीं है कि इस मुद्दे को पाने के लिए ऐसा करने में प्रदर्शन प्रदर्शन या कोई दोष है, लेकिन जैसा कि मैंने कहा ... यह मेरे लिए काम करता है। = डी
हां नहीं बदल सकता हां, एसक्यूएल कॉमांड में एसक्यूएल को दो बार निष्पादित करने के कारण प्रदर्शन प्रदर्शन हुआ है। और यदि डीएमएल कथन हैं, तो वे दो बार निष्पादित होंगे। साथ ही, SqlCommand निष्पादित करने से पहले कनेक्शन खोलने का कोई कारण नहीं है; इसका मतलब है कि आप कनेक्शन को लंबे समय तक खोल रहे हैं। आप पैरामीटर घोषणा के बाद इसे स्थानांतरित कर सकते हैं। और अंतिम "एंड अगर" के माध्यम से कनेक्शन। ओपन() एक कोशिश/पकड़ में होना चाहिए ताकि एक अपवाद होने पर रीडर और कनेक्शन को अंत में ब्लॉक में ठीक से बंद किया जा सके। –
कनेक्शन कहां रखना है, इस पर इनपुट के लिए धन्यवाद। ओपन। समझ में आता है। प्रदर्शन के हिट के लिए, मैं समझता हूं कि SqlCommand 2x चलाने के लिए कुछ हद तक "हिट" होगा। हालांकि, पहले निष्पादन न्यूनतम नहीं होगा क्योंकि ExecuteNonQuery पंक्तियों को वापस नहीं करता है? मैंने माना कि पहला तेज होगा क्योंकि यह पूरे डेटा सेट को नहीं खींच रहा है। इसलिए, पहली एसक्लोकॉमैंड्स के लिए प्रदर्शन हिट न्यूनतम है (भले ही वहां 1 एम अंतर्निहित रिकॉर्ड हों)। अगर मैं गलत हूं तो कृपया मेरी समझ को सही करें। परीक्षण नहीं किया है - बस माना जाता है कि यह परिभाषाओं के अनुसार कैसे काम करता है। – ptownbro
परिणामों को वापस खींचने का मतलब यह नहीं है कि SQL सर्वर को उन्हें ढूंढने की आवश्यकता नहीं है। यदि आप कोई क्वेरी सबमिट करते हैं, तो SQL सर्वर को 1) इसे पार्स करना है, 2) निष्पादन योजना संकलित करें, 3) इसे निष्पादित करें, और वैकल्पिक रूप से 4) परिणाम लौटाएं। पहले 3 चरण तब भी होते हैं जब आप परिणाम सेट पर पॉइंटर को त्याग देते हैं। हां, आप डेटा को स्थानांतरित करने के लिए कितना समय लेते हैं, जो कुछ है, लेकिन ज्यादा नहीं। निष्पादन योजनाओं और डेटा पृष्ठों पर किए गए कैशिंग को देखते हुए, पहला रन आम तौर पर लंबा होता है। सरल प्रश्न (कोई सॉर्टिंग/ग्रुपिंग) ठीक नहीं हो सकता है, लेकिन अधिकांश भाग के लिए, यह एक महंगा दृष्टिकोण है। –
- 1. SELECT कथन
- 2. ExecuteNonQuery
- 3. PHP Foreach कथन मुद्दा। एकाधिक पंक्तियां वापस आती हैं
- 4. कैसे SELECT कथन
- 5. पोस्टग्रेस SELECT कथन
- 6. एसक्यूएल: एकल SELECT कथन
- 7. INSERT और SELECT कथन के बीच SQL सर्वर डेडलॉक
- 8. INSERT SELECT कथन
- 9. एक सशर्त SELECT कथन
- 10. MYSQL SELECT कथन
- 11. एसक्यूएल उर्फ SELECT कथन
- 12. SQL कथन
- 13. लाइब्रेरी पार्स करने के लिए SQL कथन
- 14. एसक्यूएल सम्मिलन कथन वापसी "शून्य/कोई पंक्तियां डाली गईं"
- 15. SQL कथन
- 16. यह SQL कथन क्यों काम नहीं करेगा?
- 17. टेबल और पंक्तियां बनाने के लिए SQL स्क्रिप्ट निष्पादित करें
- 18. "ExecuteNonQuery" में "गैर" क्यों?
- 19. यदि मैं SQL कथन
- 20. फ़ील्ड की "लंबाई" के लिए MySQL SELECT कथन 1
- 21. ExecuteNonQuery() रिटर्न -1 हमेशा
- 22. SQL कथन पार्सिंग के लिए regex
- 23. सरल चयन कथन कोई परिणाम नहीं देता
- 24. संभावित कथन का उपयोग न करें SELECT कथन
- 25. SQL क्वेरी, नहीं परिणाम सेट
- 26. निष्पादित SQL कथन
- 27. एकल ओडीबीसी ExecuteNonQuery (सी #)
- 28. SQLite बहुत धीमा ExecuteNonQuery
- 29. SELECT कथन से MySQL संग्रहीत प्रक्रिया चर
- 30. एसक्यूएल SELECT कथन में पैकेज स्थिरांक का उपयोग कैसे करें?
क्या आप कुछ संदर्भ प्रदान कर सकते हैं? बेहतर अभी तक, कोड? क्या आपके 'कमांड' में पैरामीटर हैं? –