2011-04-23 5 views
5

मैं अपने ASP.Net आवेदन में साथ ओरेकल डेटाबेस काम करने के लिए Oracle.DataAccess.Client उपयोग कर रहा हूँ में एक अद्यतन बयान ओरेकल ODP.Net का उपयोग कर निष्पादित करने के लिए कैसे। में एमएसडीएन में कोई मदद दस्तावेज नहीं है ओडीपी.Net और ओरेकल का दस्तावेज़ वास्तव में वास्तव में बुरा है। मुझे इस सरल सवाल का जवाब नहीं मिल रहा है।सी #

क्या dataset ऑब्जेक्ट बनाने और dataset को अपडेट किए बिना एक सरल अपडेट स्टेटमेंट निष्पादित करना संभव नहीं है?

कैसे एक अद्यतन बयान में सी #ओरेकल ODP.Net का उपयोग कर निष्पादित करने के लिए?

+1

ओडीपी.Net आईडीबीकॉमैंड, आईडीबीकनेक्शन और आईडीबीडेटा एडाप्टर लागू करता है क्यों आप अपने अपडेट स्टेटमेंट को तैयार और निष्पादित करने के लिए उनका उपयोग नहीं कर सकते हैं। – adt

उत्तर

15

मैं यहाँ सटीक सिंटैक्स की जाँच करने की आवश्यकता होगी, लेकिन, मेरे सिर के ऊपर से कुछ त्वरित कोड

using (OracleConnection con = new OracleConnection(...)) 
{ 
    con.Open(); 
    OracleCommand cmd = con.CreateCommand(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "update table set col1 = :param1, col2 = :param2 where key = :keyValue"; 
    cmd.Parameters.AddWithValue("param1", 1); 
    cmd.Parameters.AddWithValue("param2", "Text data"); 
    cmd.Parameters.AddWithValue("keyValue", "1"); 
    cmd.ExecuteNonQuery(); 
} 

ऊपर एक कमांड वस्तु बनाता आदेश सेट एक एसक्यूएल अद्यतन बयान निष्पादित करने के लिए है में यह उदाहरण मैं पैरामीटरयुक्त क्वेरी सेट अप करने का एक तरीका दिखाता हूं, आपको हमेशा पैरामीटरयुक्त क्वेरी के साथ जाना चाहिए। एक बार कमांड सेटअप हो जाने पर आप कमांड को निष्पादित करने के लिए बस ExecuteNonQuery पर कॉल करें।

+1

स्वीट! धन्यवाद! हालांकि मुझे "AddWithValue" नहीं मिला। ExecuteNonQuery कुंजी थी, मैंने इसे पैरामीटरयुक्त क्वेरी के साथ करने की कोशिश की और यह काम किया। मुझे लगता है कि मैं इसे यहां से सुधार सकता हूं। वास्तव में अपने समय की सराहना करते हैं !! –

+0

कार्तिक, पैरामीटरयुक्त क्वेरी का उपयोग करने का लाभ यह है कि यह आपके लिए सभी SQL इंजेक्शन सुरक्षा करता है। – SurfingSanta

+0

हेया! मैं केवल लेन-देन नियंत्रण जोड़ने के लिए कुछ चीजें बदलता हूं जो ओरेकल को अपडेट कमांड करने की अनुमति देता है: 'कोड' ओरेकल कॉमांड cmd = con.CreateCommand(); ओरेकल ट्रान्सएक्शन ऑरट्रान = con.BeginTransaction (अलगाव लेवेल। रीड कॉमटेड); cmd.Transaction = oratrans; । । । cmd.ExecuteNonQuery(); oratrans.Commit(); आपका, –

0

@ क्रिस के उत्तर के आगे, यहां OracleParameter वर्ग का प्रलेखन पृष्ठ है जिसमें OracleCommand का उपयोग Update एस निष्पादित करने के लिए नमूना कोड है।

संपादित करें: यहां ODP.net documentation के लिए प्रवेश बिंदु है।

+1

आपके द्वारा प्रदान किए गए नमूना कोड का लिंक ओरेकलडेटा रीडर का उपयोग करके डेटा लाने के तरीके के बारे में बात करता है और डेटा को अपडेट करने के तरीके पर नहीं (मेरे प्रारंभिक प्रश्न के अनुसार)। मैं पहले से ही ODP.net दस्तावेज के माध्यम से चला गया और मुझे अद्यतन करने के लिए एक समान कोड नमूना नहीं मिला। मेरी इच्छा है कि एमएसडीएन ने इसे दस्तावेज किया है :( –

1

तो थोड़ा सा सोचा और थोड़ी देर के लिए इसे बाहर काम करने के बाद, मैंने पाया कि कनेक्शन कमांड में नया पैरामीटर जोड़ने के लिए मैं जिस विधि का उपयोग करता हूं वह निम्नानुसार है। मुझे पिछली पोस्ट में बताई गई विधि नहीं मिली। आपको लगता है कि मैं एक क्वेरी ऑब्जेक्ट का उपयोग कर रहा हूं कि मैं मूल्यों को पास कर रहा हूं।

public Boolean InsertMethod(Query _query) 
    { 
     var success = false; 
     var queryString = string.Format(@"INSERT INTO TABLE(ID, OWNER, TEXT) VALUES (TABLE_SEQ.NEXTVAL,:OWNER, :TEXT)"); 
     try 
     { 
      using (OracleConnection con = new OracleConnection(ConString)) 
      { 
       con.Open(); 
       OracleCommand cmd = con.CreateCommand(); 
       cmd.CommandText = queryString; 
       cmd.Parameters.Add("OWNER", _query.Owner); 
       cmd.Parameters.Add("TEXT", _query.Text);   

       int rowsUpdated = cmd.ExecuteNonQuery(); 

       if (rowsUpdated > 0) success = true; 
      } 

      return success; 
     } 
     catch (Exception ex) 
     { 
      log.Error(ex); 
      throw; 
     } 
    } 
+0

ऐसा लगता है कि आप दो बार डालने वाले हैं। दो 'cmd.ExecuteNonQuery(); ' – Halter

+1

आप सही हैं। धन्यवाद। इसे संपादित किया गया है। – nshouppuohsn