日期:2014-05-20  浏览次数:20344 次

IBatisNet更新数据库是用的什么原理?请进,内详……
小弟最近在用IBatisNet的一套东西,有个地方不是很明白。
比如更新数据库时是这样的,在Maps文件夹中我有一个XML文件,
其中有这么一段:
<update id="UpdT_product_type" parameterClass="T_product_type">
  update t_product_type set name = #Name# where id = #Id#
</update>
感觉它更新数据库好象是通过sql语句来更新的,但是问题是,我在#Name#中加入许多会引起报错标点符号,

比如:update t_product_type set name = '办公&'<>!用品' where id = 4

这样的语句如果被执行肯定有问题,但是通过IBatisNet以后却可以成功更新到数据库,我不理解它是怎么做到的,
因为以前刚学.net的时候老是被sql语句中的特殊符号难倒,不过后来也找到了解决方法。
所以特想了解下IBatisNet这玩意是如何弄的。

各位给点思路吧。

------解决方案--------------------

你说的这个问题类似我们防Sql注入时用的SqlParameter类是一个道理,如:
SqlParameter sqlpt1 = new SqlParameter("@Name", Name);
相当于把内容直接参数化,如果有像单引号等这样的特殊字符都当做是字符串的内容,所以就不会出现你所说的(老是被sql语句中的特殊符号难倒),其实为了安全,最好别用直接赋值或者拼接字符串的形式,这样会有很多漏洞。
我在解释一下IBatisNet的原理,和我上面所说的道理是一样的,只是相当于省略了我们自己用SqlParameter类进行参数化而已,它自己内部就处理好了。
再就是你说的我在#Name#中加入许多会引起报错标点符号,记住这个#Name#是个参数变量,是parameterClass="T_product_type"这个传入的参数类型的一个属性名称,你好好看看XML文件中的T_product_type类型所对应的实体类的属性就明白了。