我一向都是用开 SqlCommandBuilder.DeriveParameters 的。

但是那个方法有一个BUG。这个BUG导致该方法无法处理关联了SqlTransaction的SqlCommand

具体原因是DeriveParameters是创建一个新的SqlCommand来执行sp_procedure_params_rowset的。

但是临时的SqlCommand没有设置SqlTransaction,这样就直接导致错误。

下面是根据SqlCommandBuilder.DeriveParameters的实现复制出来的一个可用的版本:

(今天晚上回去看看 DotNet2.0 修正了这个问题没有。。)