2009-06-06 17 views
14

मैं एक क्वेरी निष्पादित करने का प्रयास कर रहा हूं जो वर्तमान में phpMyAdmin में काम करता है लेकिन यह MySQL एडाप्टर का उपयोग कर .NET में निष्पादित करते समय काम नहीं कर रहा है। यह एसक्यूएल कथन है।क्या एक .NET MySQLCommand में MySQL उपयोगकर्ता परिभाषित चर का उपयोग करना संभव है?

SELECT @rownum := @rownum +1 rownum, t . * 
FROM (
    SELECT @rownum :=0 
) r, (
    SELECT DISTINCT 
    TYPE FROM `node` 
    WHERE TYPE NOT IN ('ad', 'chatroom') 
)t  

यह मेरे आंतरिक स्केलर क्वेरी से वापस आने वाली प्रत्येक विशिष्ट पंक्ति को नंबर देने के लिए @ ड्राउनम का उपयोग कर रहा है। लेकिन अगर मैं इसे .NET में उपयोग करता हूं तो यह मान रहा है कि @rownum एक पैरामीटर है और अपवाद फेंक रहा है क्योंकि मैंने इसे परिभाषित नहीं किया है।

using (var sqlConnection = new MySqlConnection(SOURCE_CONNECTION)) 
{ 
    sqlConnection.Open(); 

    MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(SqlStatement, sqlConnection); 

    DataTable table = new DataTable(); 
    sqlAdapter.Fill(table); 
    sqlConnection.Close(); 

    return table; 
} 

इस समस्या के आसपास मैं कैसे प्राप्त कर सकता हूं इसके बारे में कोई विचार? या लाइन नंबर पाने के लिए मेरे लिए संभावित तरीके?

उत्तर

35

मैं इस blog है, जो बताता है, कि आप कनेक्शन स्ट्रिंग को

;Allow User Variables=True 

जोड़ने के लिए .net कनेक्टर के नए संस्करणों के साथ मिल गया। मेरे एसओ प्रश्न की तुलना करें How can I use a MySql User Defined Variable in a .NET MySqlCommand?

+1

सही और संक्षिप्त, धन्यवाद! – eruciform

+1

+1 जीवन बचतकर्ता। धन्यवाद। – cgTag

+0

यह मेरे लिए काम किया। धन्यवाद। – theJerm

1

आप अपनी तालिका कहा जाता ROWNUM लिए एक कॉलम जोड़ सकता है, तो मूल्यों के साथ पॉप्युलेट:

table.Columns.Add("rownum"); 
for (int i=0; i < table.Rows.Count; i++) 
{ 
table.Rows[i]["rownum"] = i; 
} 
+0

मैं ईमानदार रहूंगा कि मैं इस तरह से संख्या को मैन्युअल रूप से उत्पन्न करने से दूर रहूंगा लेकिन मैं इसे एक संभावित समाधान के रूप में देख सकता हूं। मुझे लगता है कि वास्तव में मुझे डेटा को खींचने के तरीके पर पुनर्विचार करना होगा। –

3

MySQL डेटा प्रदाता किस संस्करण का उपयोग कर रहे हैं? आपको अपडेट करने की आवश्यकता हो सकती है।

मैं 5.0 documentation में यह पाया:

प्रदाता के पूर्व संस्करण एसक्यूएल में पैरामीटर चिह्नित करने के लिए '@' प्रतीक का इस्तेमाल किया। यह MySQL उपयोगकर्ता चर के साथ असंगत है, इसलिए प्रदाता अब '?' का उपयोग करता है एसक्यूएल में पैरामीटर का पता लगाने के लिए प्रतीक। पुराने कोड का समर्थन करने के लिए, आप अपनी कनेक्शन स्ट्रिंग पर 'पुराना वाक्यविन्यास = हाँ' सेट कर सकते हैं। यदि आप ऐसा करते हैं, तो कृपया ध्यान रखें कि अगर आप अपने एसक्यूएल में उपयोग करने के इरादे से पैरामीटर को परिभाषित करने में विफल रहते हैं तो अपवाद फेंक नहीं दिया जाएगा।

+0

अद्यतन के लिए धन्यवाद। मैंने देखा कि दस्तावेज में भी। यह एक बहुत ही हालिया संस्करण है क्योंकि इसे केवल कुछ हफ्ते पहले डाउनलोड किया गया था। मैंने पुरानी वाक्यविन्यास = हाँ कोशिश की जिसमें व्यवहार में कोई बदलाव नहीं आया। –

+0

लिंक अब मृत प्रतीत होता है। – Bugs

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

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