Według MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Gdy CommandType jest ustawione na Text, dostawca danych .NET Framework dla ODBC nie obsługuje przekazywania nazwanych parametrów do instrukcji SQL lub do procedury składowanej wywoływanej przez OdbcCommand. W każdym z tych przypadków użyj symbolu zastępczego znaku zapytania (?).
Twoje zapytanie powinno brzmieć:
string sql = "insert into klant (firstname) values (?)"
Jeśli masz wiele parametrów, są one ustawiane w kolejności, w jakiej je dodajesz.
Ponadto myślę, że linia
string firstname = txtfirstname.ToString();
powinien przeczytać
string firstname = txtfirstname.Text();
Ale nie to jest przyczyną twojego bezpośredniego problemu.