Според MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Когато CommandType е зададен на Text, доставчикът на данни на .NET Framework за ODBC не поддържа предаване на именувани параметри към SQL оператор или към съхранена процедура, извикана от OdbcCommand. Във всеки от тези случаи използвайте контейнера с въпросителен знак (?).
Така че вашата заявка трябва да бъде:
string sql = "insert into klant (firstname) values (?)"
Ако имате няколко параметъра, те се задават в реда, в който ги добавяте.
Освен това мисля, че линията
string firstname = txtfirstname.ToString();
трябва да се чете
string firstname = txtfirstname.Text();
Но това не е причината за непосредствения ви проблем.