首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 你还在用SqlParameter吗?早过时了 [已结贴,结贴人:iuhxq]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-07 18:38:37 楼主
    本文章主要介绍SqlHelper使用。


    每个项目都要用到数据访问层,我做的也不例外,但是我把数据访问层做成独立项目,没有什么太大的目的,数据访问层,仅仅做数据访问用,不包含任何逻辑。


    为什么要使用数据访问层?


    如果不使用数据访问层,那么你的代码里会出现很多SqlConnection、SqlCommand、SqlDataReader、Open、 Close……这些类和方法,而且代码量很大,让你不胜其烦,而且代码写起来,其实都是体力活,没有技术含量。因此我们要把数据访问层封装起来,方便重用。微软已经替我们做好了这个工作,那就是SqlHelper,下图是SqlHelper的类关系图:




    下面介绍我的使用方法。


    执行一个无返回值的存储过程:


    create proc p_Delete@id int
    as
    delete table1 where id=@id

    这是一个删除数据的存储过程,调用该存储过程只需要一句话:SqlHelper.ExecuteNonQuery (SqlHelper.conn, "p_Delete", id);,这里的id是int类型,而不是SqlParameter类型。该调用是调用的public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)方法。以此类推。返回一个DataSet类型:SqlHelper.ExecuteDataset (SqlHelper.conn, pro, 参数列表);参数也是直接传递,无需构造SqlParameter……好了,本文主要是介绍一个小技巧,就是params object[]的使用方法,让高手见笑了

    出处:数据访问层SqlHelper的使用

    大家觉得这么做有没有什么坏处?
    0  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-07 19:05:581楼 得分:0

    无知。
    跟到函数里面看看在说,
    public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-07 19:24:082楼 得分:0
    早就听说过微软的这个类库,但没多少人用,不知道为什么。有没有人可以讲讲具体有什么坏处?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-07 19:24:553楼 得分:0
    是说我无知吗?

    引用 1 楼 crossrowman 的回复:

    无知。
    跟到函数里面看看在说,
    public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-07 21:28:534楼 得分:0
    小灰!顶你~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-07 21:48:205楼 得分:0
    实际上SQLHelper里面使用的也是参数化的思想,在这个类的很多方法里面都有SqlParameter的身影,所以,楼主的标题?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-07 21:50:376楼 得分:0
    只是他把SqlParamter[]换成了Object[],这样传值更准确,只能说SqlHelper封装的更好而已.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-07 22:42:197楼 得分:0
    我发本贴的目的是告诉一些网友(姑且称之为菜鸟吧),SqlHelper可以这么用,不要再自己new Sqlparameter实例了。太麻烦了,还要设置参数类型,长度,值。


    大家不信可以在论坛里搜索下,看有多少使用SqlHelper的,还在new SqlParameter,我是看到了这么用很麻烦,不知道直接调用object的有什么不妥。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-07 22:45:298楼 得分:0
    至于标题嘛,当然要取得有点噱头咯。。。。。呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-07 22:46:229楼 得分:0
    感觉还是直接调用存储过程来的简洁
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wapit
    • 等级:
    发表于:2008-04-08 00:18:3510楼 得分:0
    肯定new SqlParameter效率要高些. 省得SqlHelper类再进行一次封箱拆箱的过程(貌似是这么个说法吧)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 00:26:3011楼 得分:0
    sqlhelper ~@~!~@
    n年前就有了啊,怎么。。。。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vrhero
    • 等级:
    发表于:2008-04-08 00:27:1712楼 得分:0
    SqlHelper不过时吗?玩具类...学生用还差不多...

    去看看Linq吧...就算还没升级到3.5也应该去看看Enterprise Library...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunlovesea
    • 等级:
    发表于:2008-04-08 08:03:0013楼 得分:0
    1、params object[]有没有防注入的功能?
    2、装箱,拆箱在参数比较多时会不会影响效率?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw
    • 等级:
    发表于:2008-04-08 08:08:1414楼 得分:0
    暈,SqlHelper裡面難道就不使用SqlParameter嗎?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-08 08:13:1915楼 得分:0
    这么赶时髦很累吧?

    引用 12 楼 vrhero 的回复:
    SqlHelper不过时吗?玩具类...学生用还差不多...

    去看看Linq吧...就算还没升级到3.5也应该去看看Enterprise Library...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 08:14:5116楼 得分:0
    微软很少推SqlHelper,他是在推另一个封装的数据库访问层 企业类库(Enterprise Library )
    SqlHelper他只针对sql连接,比较难扩展,但是企业类库却能很好的根据配置文件来使用不同的连接方式,而且提供的接口也更灵活
    建议你也去看看企业类库,做一下比较。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-08 08:15:1517楼 得分:0
    防注入肯定有。

    装箱拆箱如果传递SqlParameter也是需要的,所以从这个角度说应该没区别。
    引用 13 楼 sunlovesea 的回复:
    1、params object[]有没有防注入的功能?
    2、装箱,拆箱在参数比较多时会不会影响效率?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • usxue
    • 等级:
    发表于:2008-04-08 08:45:0418楼 得分:0
    感觉LZ在做广告哎,哗众取宠,标新立异!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 08:47:0319楼 得分:0
    小灰头像怎么这么可爱呢?

    这小女孩是你女儿吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-08 08:52:2720楼 得分:0
    我有这么大女儿就好了,唉!
    引用 19 楼 lihongdian 的回复:
    小灰头像怎么这么可爱呢?

    这小女孩是你女儿吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 13:17:1221楼 得分:0
    学习!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 13:20:4722楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 13:27:5823楼 得分:0
    学习了。 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 16:12:3524楼 得分:0
    呵呵,还没听说过,不过帮顶了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 16:53:3125楼 得分:0
    很好,
    多分享些技巧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • shoushii
    • 等级:
    发表于:2008-04-08 17:22:3726楼 得分:0
    支持LZ的精神
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 18:08:4927楼 得分:0
    该回复于2008-04-08 19:11:22被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 18:12:5228楼 得分:0
    支持小灰
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 18:20:5829楼 得分:0
    sqlHelper类还不错的啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 19:25:1630楼 得分:0
    学习了。,。。我感觉还是原来的好。要是都那么简单了,谁都能做网站了,所以啊程序员的工资低就是这么来的,微软这败类
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 19:38:3631楼 得分:0
    精神可佳
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 19:42:4632楼 得分:0
    如果要写的漂亮 或者面向对象 或者编译时类型检查 还是ORM 才是王道

    SqlHelper 这个用的人多的和米一样...
    不过确实比较实用 轻量 简单 稳定

    另外......居然发0分贴~!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 19:43:3033楼 得分:0
    忽然想起Linq  让写法更优雅 编译时检查更完善
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vrhero
    • 等级:
    发表于:2008-04-08 20:20:0134楼 得分:0
    引用 15 楼 iuhxq 的回复:
    这么赶时髦很累吧?

    如果你把新的工程方法看作赶时髦...那你只能停留在代码工人的境界...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-08 20:38:3235楼 得分:0
    不知外面的人是否都用这个SqlHelp
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iuhxq
    • 等级:
    发表于:2008-04-08 21:02:4036楼 得分:0
    这就是钻牛角尖了。
    微软出了c#,那他为什么不用c#来开发vs2005?是不能实现吗?我觉得更多的应该是保护现有投资。

    引用 34 楼 vrhero 的回复:
    引用 15 楼 iuhxq 的回复:
    这么赶时髦很累吧? 

    如果你把新的工程方法看作赶时髦...那你只能停留在代码工人的境界...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • boblaw