2012-04-07 12 views
33

मैं वर्तमान में एक सी # परियोजना पर काम कर रहा हूँ और मैं एक डालने क्वेरी जो भी एक ही समय में एक का चयन करता है, उदाहरण के लिए चला रहा हूँ पर प्रभावित पंक्तियों प्राप्त करें:ExecuteNonQuery

INSERT INTO table (SELECT * FROM table WHERE column=date) 

वहाँ एक रास्ता मैं कैसे देख सकते हैं है इस क्वेरी के दौरान कई पंक्तियां डाली गईं?

उत्तर

69

ExecuteNonQuery - प्रभावित पंक्तियों की संख्या देता है।

SqlCommand comm; 
// other codes 
int numberOfRecords = comm.ExecuteNonQuery(); 
+2

मैं यह कर रहा हूँ, और भले ही एक नई पंक्ति में बनाया गया था किसी कारण से मेरी टेबल, यह विधियां -1 लौटाती हैं। क्या मेरे पास मेरे एसक्यूएल स्टेटमेंट में कुछ भी होना चाहिए? – JoeManiaci

+1

SqlCommand.ExecuteNonQuery() प्रविष्टि/अद्यतन/हटाते समय लौटाता है https://blogs.msdn.microsoft.com/spike/2009/01/27/sqlcommand-executenonquery-returns-1-when-doing-insert देखें -अपडेट-डिलीट/ –

+1

यह हमेशा काम नहीं करता है क्योंकि कोई उम्मीद कर सकता है। एक अद्यतन के लिए लौटाई गई पंक्तियों की संख्या पंक्तियों की संख्या है जो * वास्तव में परिवर्तित की गई पंक्तियों की संख्या के बजाय बदल दी गई थीं। मान लें कि आप एक अद्यतन कर रहे हैं जहां 50 पंक्तियों तक प्रभावित हो सकता है। हालांकि उन पंक्तियों में से 35 के लिए अद्यतन किसी भी डेटा को बदलने का कारण नहीं बनता है। 50 संभावित पंक्तियों की केवल 15 पंक्तियों के लिए डेटा बदलता है। इस मामले में कोई उम्मीद करेगा कि "15" लौटाया जाएगा, लेकिन बदले गए मूल्य 50 है, पंक्तियों की कुल संख्या। – Ian

12

यदि आप SqlCommand में अपने प्रश्न से एसक्यूएल चलाते हैं और ExecuteNonQuery के वापसी मूल्य की जांच करते हैं तो आपको यह बताना चाहिए कि कितने रिकॉर्ड प्रभावित हुए थे।

documentation से:

वापसी मूल्य
प्रकार: System.Int32
प्रभावित पंक्तियों की संख्या।

0

आप ExecuteNonQuery() के एक थोक चलाने के लिए, और उन्हें एक बार में प्रतिबद्ध हैं, तो आप से वापसी मान पढ़ द्वारा कनेक्शन के बाद कुल परिवर्तन की संख्या प्राप्त कर सकते हैं "का चयन करें TOTAL_CHANGES();"

समारोह की कुल परिवर्तन प्राप्त करने:

public static long GetTotalChanges(SQLiteConnection m_dbConnection) 
     { 
      string sql = "SELECT total_changes();"; 
      using (SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection)) 
      { 
       using (SQLiteDataReader reader = command.ExecuteReader()) 
       { 
        reader.Read(); 
        return (long)reader[0]; 
       } 
      } 
     } 

एक और समारोह में यह प्रयोग करें:

public static long MyBulkInserts() 
     { 
      using (SQLiteConnection m_dbConnection = new SQLiteConnection()) 
      { 
       m_dbConnection.Open(); 
       using (var cmd = new SQLiteCommand(m_dbConnection)) 
       { 
        using (var transaction = m_dbConnection.BeginTransaction()) 
        { 
         //loop of bulk inserts 
         { 
          cmd.ExecuteNonQuery(); 
         } 
         transaction.Commit(); 
        } 
       } 
       return GetTotalChanges(m_dbConnection); 
      } 
     } 
संबंधित मुद्दे