Here's one solution that I mentioned in the comments. It looks complicated but it's not that bad.
Here, your DAC is driving from -3V to +3V to sweep the diode voltage. U1 is basically a simple voltage follower but with Q1 and Q2 tacked on as a power stage. You can use a power opamp, but I decided to make a cheapo design that can use any cheap bipolar opamp. The power stage is some cheap small bipolar transistors. Q1 and Q2 form a simple Class B driver stage. No fancy bias is needed because the opamp will adjust the drive to get the Vout set by the DAC. Plot #1 shows this.
Plot #2 shows the DAC voltage setting versus the detected diode current as an output voltage (0.1 Amp = 1.0 V output).
Plot #3 shows the current limiting in action. Q3 and Q4 act provide current limiting to keep the current no more than about 250 mA. Basically, when current is high enough to make the voltage across R5 reach about 0.6V, Q3 starts to turn on. This in turn shorts across the base-emitter junction of Q1 and prevents Q1 from turning on any further. So you can see that R5 controls the limit value, R5 = 0.6V / (desired Ilimit).
Q4 does the same thing to Q4 so current limiting is symmetrical.
This nice simple current limiter design is from here:
http://electronicdesign.com/power/current-limiter-offers-circuit-protection-low-voltage-drop
On the current sensing side, U2 is an opamp wired as a differential amplifier with a gain of 100 (gain = R3 / R1). So if diode current is 100 mA, then you get 0.01V across Rsns, and U2's output is 100x of that or 1.0 Volts, which you can then feed into your ADC. Note that the output voltage swings + or - depending on the direction of the diode current.
Keep in mind, there is a problem with this design: power dissipation can go beyond the rated of the 2N2222 and 2N2907 transistors. At max current of 250 mA, Q1 and Q2 will see about 4 Volts drop, or 4 V x 0.25 Amp = 1 Watt, which well exceeds the 0.6 Watt rating of these transistors. You should use higher power transistors.
Or you can remove the current limiting completely and just stop your sweep in SW when it hits certain current limit.
Anyway, I hope that helps. -Vince