आप टेबल नाम को पैरामीटर के रूप में पास नहीं कर सकते हैं। ऐसा करने के लिए आपको गतिशील एसक्यूएल का उपयोग करना होगा, इसलिए आपको इसे करने के लिए एकाग्रता को स्ट्रिंग करना होगा, उदाहरण के लिए
MySqlCommand cmd = new MySqlCommand(String.Format("select * from {0}",tableName), cn)
लेकिन क्योंकि उपयोगकर्ता तालिका नाम इनपुट करते हैं, इसलिए SQL इंजेक्शन संभव है। आप इस SQL का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि क्या तालिका कुछ भी पूछने से पहले मौजूद है:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';
(आप इस क्वेरी को पूरी तरह से पैरामीट्रिज़ कर सकते हैं, इसलिए SQL इंजेक्शन समाप्त हो जाएगा)
आम तौर पर, SQL इंजेक्शन से सावधान रहें। लेकिन अगर आप इस आंतरिक का उपयोग करते हैं (उपयोगकर्ता के सामने नहीं), तो SQL इंजेक्शन समस्या नहीं होनी चाहिए।
बेहतर है, आप इससे निपटने के लिए एक संग्रहीत कार्यविधि का निर्माण कर सकते हैं, जैसा कि मेरे दूसरे उत्तर में है: