Volgens MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Als CommandType is ingesteld op Tekst, biedt de .NET Framework-gegevensprovider voor ODBC geen ondersteuning voor het doorgeven van benoemde parameters aan een SQL-instructie of aan een opgeslagen procedure die wordt aangeroepen door een OdbcCommand. Gebruik in beide gevallen het vraagteken (?) placeholder.
Uw vraag zou dus moeten zijn:
string sql = "insert into klant (firstname) values (?)"
Als u meerdere parameters heeft, worden deze ingesteld in de volgorde waarin u ze toevoegt.
Daarnaast denk ik dat de regel
string firstname = txtfirstname.ToString();
zou moeten lezen
string firstname = txtfirstname.Text();
Maar dat is niet de oorzaak van uw onmiddellijke probleem.