tendo ad escludere la storia dell'integer-stringa come dici... tu devi passare una query all'SqlDataAdapter... una query è sempre e comunque una stringa (quindi anche se la tua variabile è integer è ovvio che viene convertita in una stringa)... se la query funziona sul DB deve per forza funzionare sull'SqlDataAdapter...
se il campo fk_commessa nella tabella TComDoc è di tipo integer, la query come hai fatto tu dovrebbe andare bene e dovrebbe funzionare tutto correttamente...
a questo punto non vorrei che valorizzi malamente la variabile id_commessa prima di arrivare in quel punto (tipo che ha valore 0 o un altro valore che non ha corrispondenze nel DB)...
presumo che il tuo progetto sia in VB.NET, prova a creare la query su una variabile di tipo string e solo dopo passarla all'SqlDataAdapter
metti un breakpoint sulla riga
adapter = New System.Data.SqlClient.SqlDataAdapter(query, con)
e, quando ci arrivi in debug, verifica il valore della variabile query e prova a far eseguire la query sul DB... così dovresti capire il perché non ti funziona...