2011-10-27 17 views
8

क्या इसे निष्पादित करने के बाद कमांडटेक्स्ट तक पहुंचने का कोई तरीका है?सटीक एसक्यूएल देखने के बाद सी #

cmd = new OracleCommand(sql.ToString(), conn); 
cmd.Parameters.Add(new OracleParameter("@parm", parmValue)); 


OracleDataAdapter da = new OracleDataAdapter(cmd); 
DataTable dt = new DataTable(); 
da.Fill(dt); 

क्या मैं पता करने की जरूरत एसक्यूएल कमांड स्ट्रिंग डेटाबेस पहले से ही एसक्यूएल में निहित parmValue के मूल्य होता है में मार डाला है: मैं निम्नलिखित कोड है। दूसरे शब्दों में, मुझे क्वेरी के अंदर "@parm" स्ट्रिंग को देखने में सक्षम नहीं होना चाहिए बल्कि इसके बजाय मूल्य।

मुझे इसकी आवश्यकता है ताकि मैं भविष्य में संदर्भ के लिए लॉग डेटाबेस में इस एसक्यूएल को धक्का दे सकूं।

अग्रिम धन्यवाद।

+2

यहां तक ​​कि जब इसे वास्तव में एसक्यूएल सर्वर पर भेजा जाता है तो यह parametrized है; चर घोषित किए जाते हैं और फिर क्वेरी के अंदर उपयोग किए जाते हैं। –

+1

संभावित डुप्लिकेट [एसक्यूएल कॉमांड-ऑब्जेक्ट से उत्पन्न SQL-स्टेटमेंट कैसे प्राप्त करें?] (Http://stackoverflow.com/questions/265192/how-to-get-the-generated-sql-statement-from-a -स्क्लोकैंड-ऑब्जेक्ट) –

+0

डर्न! वह मेरा जवाब था! जब आप मेरा टाइप कर रहे थे तो आपको डुप्ली मिली। – David

उत्तर

1

मुझे ओरेकल के बारे में निश्चित नहीं है, लेकिन आरडीबीएमएस में मैं व्यक्तिगत रूप से काम करता हूं यह नहीं किया जा सकता है।

जब मुझे पैरामीटर प्राप्त करने और परिणामस्वरूप SQL क्वेरी देखने की आवश्यकता होती है तो मैंने हमेशा कोड में पैरामीटर संग्रह के माध्यम से लूप करके और परिणामी क्वेरी या कुछ ऐसा लॉग करने के लिए नाम/मूल्य जोड़े निकालने के द्वारा इसे हमेशा किया है

StoredProc = InsertCallRecord: पैरामीटर: हमारी त्रुटि लॉगिंग डेटाबेस में; ग्राहकआईडी = 651; CallId = 1234 PersonCalling = डेव ...

मैं केवल क्योंकि यह एक प्रदर्शन है त्रुटि लॉगिंग ऐसा करने प्रत्येक कॉल पर इसे करने के लिए खींचें, लेकिन यह एक परीक्षण परिदृश्य में भी काम कर सकता है ।

2

मुझे यकीन नहीं है कि ओरेकल इस तरह से बिल्कुल काम करता है, लेकिन अधिकांश अन्य डीबी प्रदाताओं के लिए, एक पैरामीटरयुक्त क्वेरी सर्वर को सादे पाठ क्वेरी के रूप में नहीं भेजी जाती है, लेकिन इसके बजाय उचित पैरामीटर के साथ एक निष्पादन आदेश के रूप में भेजा जाता है । दूसरे शब्दों में, आपके आवेदन के स्तर पर केवल प्रतिस्थापन नहीं होता है, केवल डीबी में ही। सर्वर पर निष्पादित किए जा रहे वास्तविक कमांड को देखने के लिए, आप डेटाबेस के ट्रेस/लॉग को देखना चाह सकते हैं।

संबंधित मुद्दे