Si no se provee una imagen, que el valor del parámetro @Imagen sea DbNull.Value. La tabla debe tener el campo correspondiente configurado para aceptar nulos.
Y la construcción de su CommandText es incorrecta pues está usted concatenando SQL que no se hace. La forma correcta es usar parámetros, como lo hace (a medias) con @Imagen.
cmd.CommandText = "Insert into Costos values(@txtno, @config, @txtmaql, @txtco2l, @txtenergial, @txtotrol.Text, @txtdepre, @txttubo, @txtsalario.Text, @txttotalcosto, @Imagen)";
Jose R. MCP
Code Samples