Menurut MSDN.
http ://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx
Saat CommandType diatur ke Teks, .NET Framework Data Provider untuk ODBC tidak mendukung penerusan parameter bernama ke pernyataan SQL atau ke prosedur tersimpan yang dipanggil oleh OdbcCommand. Dalam salah satu dari kasus ini, gunakan tanda tanya (?) placeholder.
Jadi kueri Anda seharusnya:
string sql = "insert into klant (firstname) values (?)"
Jika Anda memiliki beberapa parameter, parameter tersebut disetel sesuai urutan Anda menambahkannya.
Selain itu, saya pikir garisnya
string firstname = txtfirstname.ToString();
harus membaca
string firstname = txtfirstname.Text();
Tapi bukan itu yang menyebabkan masalah langsung Anda.