Podle MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Když je CommandType nastaven na Text, zprostředkovatel dat .NET Framework pro ODBC nepodporuje předávání pojmenovaných parametrů do příkazu SQL nebo do uložené procedury volané příkazem OdbcCommand. V obou těchto případech použijte zástupný symbol otazníku (?).
Váš dotaz by tedy měl znít:
string sql = "insert into klant (firstname) values (?)"
Pokud máte více parametrů, jsou nastaveny v pořadí, v jakém je přidáváte.
Navíc si myslím, že čára
string firstname = txtfirstname.ToString();
by si měl přečíst
string firstname = txtfirstname.Text();
Ale to není to, co způsobuje váš bezprostřední problém.