Secondo MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Quando CommandType è impostato su Text, il provider di dati .NET Framework per ODBC non supporta il passaggio di parametri denominati a un'istruzione SQL oa una stored procedure chiamata da un OdbcCommand. In uno di questi casi, utilizzare il segnaposto punto interrogativo (?).
Quindi la tua domanda dovrebbe essere:
string sql = "insert into klant (firstname) values (?)"
Se hai più parametri, vengono impostati nell'ordine in cui li aggiungi.
Inoltre, penso alla linea
string firstname = txtfirstname.ToString();
dovrebbe leggere
string firstname = txtfirstname.Text();
Ma non è questo che causa il tuo problema immediato.