通常对数据库的查询和操作,大家习惯于拼接sql语句,在论坛上也经常有拼接sql语句方面的问题,让许多初学者深感头痛,即使是老手,遇到复杂的拼接也难免会出错。其实访问数据库我们有更好的选择,这就是参数化查询,这种方法高效安全,又可以省掉程序中拼接sql的麻烦。不过呢,这方面的介绍不是很多,有介绍通常的方法似乎比较烦琐,不能写成通用的方法函数,所以好象使用的人比较少。最近小小的研究了一下,有所发现,备忘在此,共大家参考:
以下示例,基于xp sp3 + ADO2.8 + sql server 2000 (或者Access 2003)
常见的方法:
从上面的示例可见,要将参数化查询写成一个通用的方法或函数,的确有点困难。在尝试过程中,我偶然发现,其实cmd.Parameters这个集合,有些数据库存引擎提供了自动序列化的功能,并不要一项项的Append。而且效率远高于Append方法,以下是示例:
这个方法同样也可以用于sql数据库的存储过程,只是要注意二点:一是存储过程的用户第一个参数的序号是1,序号0参数已经用于存储过程内部的事务;二是输出参数不用赋值。
我这儿的活就是程序要同时访问不同平台的数据库,总想找出一个通用高效安全的方法,所以才有以上的发现,这样,虽然不是所有数据引擎都提供Parameters的序列化,但结合vb6提供的多态性,总算包装了一个适用目前要求的dll。
好了,上面只是一点编程心得,还有许多要完善的地方,有兴趣的可以继续深入。