Enligt MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
När CommandType är inställt på Text, stöder inte .NET Framework Data Provider för ODBC att skicka namngivna parametrar till en SQL-sats eller till en lagrad procedur som anropas av ett OdbcCommand. I något av dessa fall, använd frågetecknet (?) platshållare.
Så din fråga bör vara:
string sql = "insert into klant (firstname) values (?)"
Om du har flera parametrar ställs de in i den ordning du lägger till dem.
Dessutom tror jag linjen
string firstname = txtfirstname.ToString();
borde läsa
string firstname = txtfirstname.Text();
Men det är inte det som orsakar ditt omedelbara problem.