Según MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Cuando CommandType se establece en Texto, el proveedor de datos de .NET Framework para ODBC no admite el paso de parámetros con nombre a una instrucción SQL o a un procedimiento almacenado llamado por OdbcCommand. En cualquiera de estos casos, utilice el marcador de posición de signo de interrogación (?).
Entonces su consulta debería ser:
string sql = "insert into klant (firstname) values (?)"
Si tiene varios parámetros, se establecen en el orden en que los agrega.
Además, creo que la línea
string firstname = txtfirstname.ToString();
debería leer
string firstname = txtfirstname.Text();
Pero eso no es lo que está causando su problema inmediato.