Selon MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Lorsque CommandType a la valeur Text, le fournisseur de données .NET Framework pour ODBC ne prend pas en charge la transmission de paramètres nommés à une instruction SQL ou à une procédure stockée appelée par OdbcCommand. Dans l'un ou l'autre de ces cas, utilisez l'espace réservé au point d'interrogation (?).
Votre requête devrait donc être :
string sql = "insert into klant (firstname) values (?)"
Si vous avez plusieurs paramètres, ils sont définis dans l'ordre dans lequel vous les ajoutez.
De plus, je pense que la ligne
string firstname = txtfirstname.ToString();
devrait lire
string firstname = txtfirstname.Text();
Mais ce n'est pas ce qui cause votre problème immédiat.