El problema no es el campo idUsuario. Si fuese ese campo el mensaje de error diría "IDUSUARIO don't have default value" ( IDUSUARIO no tiene valor por defecto). Si no te manda ese mensaje es porque el problema no está allí. La cosa funciona bien.
En realidad el problema lo tienes en la construcción de la sentencia. Fíjate en este detalle:
Código:
comandoSql += "'" +provincia+ "'";
¿Dónde está la coma de separación entre este campo y el resto?
Exacto. No está.
Así éste campo y el siguiente se están encadenando en un sólo string, por lo que la cantidad de campos en VALUE() no es de 17 sino 16.
Para evitar este tipo de errores mi sugerencia es que pongas una visualización de la sentencia construida a modo de prueba antes de su ejecución, de modo de poder ver qué tan bien se construyó antes de enviarla a la base.
Es una forma de debuggearla. De todos modos ese stop para verla lo puedes borrar cuando sepas que la cosa está bien.