u1[x_, y_, z_] := x^2 + y^2;
u2[x_, y_, z_] := z;
c1 = 1;
c2 = 1;
ContourPlot3D[{u1[x,y,z] == c1, u2[x,y,z] == c2}, {x, -2,2}, {y, -2,2}, {z, -2,2}, ContourStyle -> Opacity[.8]]

v[x_, y_, z_] := {-y, x, 0};
u1[x_, y_, z_] := x^2 + y^2;
u2[x_, y_, z_] := z;
c1 = 1;
c2 = 1;
p1=ContourPlot3D[{u1[x,y,z] == c1, u2[x,y,z] == c2}, {x, -2,2}, {y, -2,2}, {z, -2,2}, ContourStyle -> Opacity[0.8]];
p2 = VectorPlot3D[v[x,y,z],{x, -2,2}, {y, -2, 2}, {z, -2, 2}];
Show[{p1, p2}]

You can make copies of the above cell, and change the vector fields and/or first integrals u1 and u2.  
Try this with the vector field V = {x,y,z}.
If you change the bounds of the box, you may want to do
Show[{p1, p2}, BoxRatios -> Automatic]

Manipulate[ContourPlot3D[{u1[x,y,z] == c1, u2[x,y,z] == c2}, {x, -2,2}, {y, -2,2}, {z, -2,2}, ContourStyle -> Opacity[.8]], {{c1, 1}, 0,4,Appearance->"Labeled"}, {{c2, 0}, -2, 2,Appearance->"Labeled"},
Initialization -> { (* this makes the functions "local" *)
u1[x_, y_, z_] := x^2 + y^2;
u2[x_, y_, z_] := z
}]

The Manipulate function is fun but temperamental.  If things get weird with Mathematica, you can always got to the Evaluation menu and quit the local kernel, and start again.