Ifølge MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Når CommandType er indstillet til Tekst, understøtter .NET Framework Data Provider til ODBC ikke videregivelse af navngivne parametre til en SQL-sætning eller til en lagret procedure kaldet af en OdbcCommand. I begge disse tilfælde skal du bruge spørgsmålstegnet (?) pladsholder.
Så din forespørgsel skal være:
string sql = "insert into klant (firstname) values (?)"
Hvis du har flere parametre, indstilles de i den rækkefølge, du tilføjer dem.
Derudover synes jeg stregen
string firstname = txtfirstname.ToString();
skal læses
string firstname = txtfirstname.Text();
Men det er ikke det, der forårsager dit umiddelbare problem.