Haber, para empezar el lugar adecuado del rollback es colocarlo a la hora que te agarra la excepción, para que no uses doble try...
Y bueno un ejemplo de una transacción es esta:
Código vb:
Ver originalDim cn as new sqlconnection(strcn)
dim tx as sqltransaction
try
cn.open
tx=cn.begintransaction
sql="insert into encabezadoFact values (@cod,@etc)"
dim cmd as new sqlcommand(sql,cn,tx) 'Fijate que se pasan estos 3 valores
cmd.parameters.addwithvalue("@cod",lblcod.text)
cmd.parameters.addwithvalue("@etc",txtetc.text)
cmd.executenonquery
tx.commit
catch ex as exception
tx.rollback
msgbox(ex.message)
finally
cn.close
end try
Quizás te aparezca algunos de esos con subrayado verde, algo que diga parecido a esto: Se hará caso omisa a la hora de ejecución; algo asi recuerdo...Ejecuta tu programa no pasa nada si es que aparece eso...
En fin, espero que te sirva...