最近客户找我做一个更新SqlServer的算法,我在需求还算明确的情况下把代码写完,发了过去。
结果客户很快就打电话给我,说他们不是用 System.Data.SqlClient 的。要求我把代码改成OleDb的。
为了使程序能让OleDb和SqlClient都能用,我把程序的接口改为 IDbXXX .
可是问题出现了,OleDb竟然不把参数送到SqlServer那边去!
例如这样的代码,
其中 MyBussinessLogic 是我的实现。通过IDbXXX的方法,把CommandText,参数等信息放进去后,就执行Command 。 如果外面传一个 SqlTransaction 进来,那么是没有问题的。
但是如果外面传 OleDbTransaction 进来,那么这个OleDb的提供者就只把CommandText传到SqlServer去,那么执行当然会出错了。
以前没有用 OleDb 时,以为 SqlClient 只是性能上更加优化而已, 直到今天才知道还有这个问题存在。。