MSDN के अनुसार।
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
जब कमांड टाइप को टेक्स्ट पर सेट किया जाता है, तो ODBC के लिए .NET Framework डेटा प्रदाता किसी SQL कथन या OdbcCommand द्वारा बुलाए गए संग्रहीत कार्यविधि में नामित पैरामीटर को पास करने का समर्थन नहीं करता है। इनमें से किसी भी स्थिति में, प्रश्नवाचक चिह्न (?) प्लेसहोल्डर का उपयोग करें।
तो आपकी क्वेरी होनी चाहिए:
string sql = "insert into klant (firstname) values (?)"
यदि आपके पास एकाधिक पैरामीटर हैं, तो वे आपके द्वारा जोड़े जाने के क्रम में सेट होते हैं।
इसके अलावा, मुझे लगता है कि रेखा
string firstname = txtfirstname.ToString();
पढ़ना चाहिए
string firstname = txtfirstname.Text();
लेकिन यह वह नहीं है जो आपकी तत्काल समस्या पैदा कर रहा है।