首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
.NET技术
ASP.NET
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
你还在用SqlParameter吗?早过时了
[已结贴,结贴人:iuhxq]
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
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
回复次数:
74
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
crossrowman
godi
等级:
发表于:
2008-04-07 19:05:58
1
楼 得分:
0
无知。
跟到函数里面看看在说,
public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
gaojian001
等级:
发表于:
2008-04-07 19:24:08
2
楼 得分:
0
早就听说过微软的这个类库,但没多少人用,不知道为什么。有没有人可以讲讲具体有什么坏处?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-07 19:24:55
3
楼 得分:
0
是说我无知吗?
引用 1 楼 crossrowman 的回复:
无知。
跟到函数里面看看在说,
public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
max_userid
学而不倦
等级:
发表于:
2008-04-07 21:28:53
4
楼 得分:
0
小灰!顶你~
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hery2002
苦*行*僧
等级:
发表于:
2008-04-07 21:48:20
5
楼 得分:
0
实际上SQLHelper里面使用的也是参数化的思想,在这个类的很多方法里面都有SqlParameter的身影,所以,楼主的标题?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
hery2002
苦*行*僧
等级:
发表于:
2008-04-07 21:50:37
6
楼 得分:
0
只是他把SqlParamter[]换成了Object[],这样传值更准确,只能说SqlHelper封装的更好而已.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-07 22:42:19
7
楼 得分:
0
我发本贴的目的是告诉一些网友(姑且称之为菜鸟吧),SqlHelper可以这么用,不要再自己new Sqlparameter实例了。太麻烦了,还要设置参数类型,长度,值。
大家不信可以在论坛里搜索下,看有多少使用SqlHelper的,还在new SqlParameter,我是看到了这么用很麻烦,不知道直接调用object的有什么不妥。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-07 22:45:29
8
楼 得分:
0
至于标题嘛,当然要取得有点噱头咯。。。。。呵呵
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Developer2007
漫步云端
等级:
发表于:
2008-04-07 22:46:22
9
楼 得分:
0
感觉还是直接调用存储过程来的简洁
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wapit
前途是光明滴,道路是曲折滴
等级:
发表于:
2008-04-08 00:18:35
10
楼 得分:
0
肯定new SqlParameter效率要高些. 省得SqlHelper类再进行一次封箱拆箱的过程(貌似是这么个说法吧)
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
kqh168
夺米骑兵
等级:
发表于:
2008-04-08 00:26:30
11
楼 得分:
0
sqlhelper ~@~!~@
n年前就有了啊,怎么。。。。。。。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
vrhero
人都是逼出来的...
等级:
发表于:
2008-04-08 00:27:17
12
楼 得分:
0
SqlHelper不过时吗?玩具类...学生用还差不多...
去看看Linq吧...就算还没升级到3.5也应该去看看Enterprise Library...
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
sunlovesea
不要轻言放弃,否则对不起自己!
等级:
发表于:
2008-04-08 08:03:00
13
楼 得分:
0
1、params object[]有没有防注入的功能?
2、装箱,拆箱在参数比较多时会不会影响效率?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
boblaw
黑马王子‧偷回忆的人
等级:
发表于:
2008-04-08 08:08:14
14
楼 得分:
0
暈,SqlHelper裡面難道就不使用SqlParameter嗎?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-08 08:13:19
15
楼 得分:
0
这么赶时髦很累吧?
引用 12 楼 vrhero 的回复:
SqlHelper不过时吗?玩具类...学生用还差不多...
去看看Linq吧...就算还没升级到3.5也应该去看看Enterprise Library...
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
greenery
greenery
等级:
发表于:
2008-04-08 08:14:51
16
楼 得分:
0
微软很少推SqlHelper,他是在推另一个封装的数据库访问层 企业类库(Enterprise Library )
SqlHelper他只针对sql连接,比较难扩展,但是企业类库却能很好的根据配置文件来使用不同的连接方式,而且提供的接口也更灵活
建议你也去看看企业类库,做一下比较。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-08 08:15:15
17
楼 得分:
0
防注入肯定有。
装箱拆箱如果传递SqlParameter也是需要的,所以从这个角度说应该没区别。
引用 13 楼 sunlovesea 的回复:
1、params object[]有没有防注入的功能?
2、装箱,拆箱在参数比较多时会不会影响效率?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
usxue
尘飞扬 www.gphoneabc.com
等级:
发表于:
2008-04-08 08:45:04
18
楼 得分:
0
感觉LZ在做广告哎,哗众取宠,标新立异!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lihongdian
邪恶=?强大
等级:
发表于:
2008-04-08 08:47:03
19
楼 得分:
0
小灰头像怎么这么可爱呢?
这小女孩是你女儿吗?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-08 08:52:27
20
楼 得分:
0
我有这么大女儿就好了,唉!
引用 19 楼 lihongdian 的回复:
小灰头像怎么这么可爱呢?
这小女孩是你女儿吗?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
nettman
nm
等级:
发表于:
2008-04-08 13:17:12
21
楼 得分:
0
学习!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
luckyboy101
luckyboy101
等级:
发表于:
2008-04-08 13:20:47
22
楼 得分:
0
学习
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
howkeee
佐.Net
等级:
发表于:
2008-04-08 13:27:58
23
楼 得分:
0
学习了。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
starfork
starfork
等级:
发表于:
2008-04-08 16:12:35
24
楼 得分:
0
呵呵,还没听说过,不过帮顶了
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wxg22526451
☆旋风☆
等级:
发表于:
2008-04-08 16:53:31
25
楼 得分:
0
很好,
多分享些技巧
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
shoushii
兵无常势,水无常形;吾常闻拙速,未尝闻巧以久也;运用之妙,存乎一心;
等级:
发表于:
2008-04-08 17:22:37
26
楼 得分:
0
支持LZ的精神
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
nicholaslee007
老虎机破解器
等级:
发表于:
2008-04-08 18:08:49
27
楼 得分:
0
该回复于2008-04-08 19:11:22被版主删除
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
wzy_love_sly
小菜~ぐ~(紫煈)
等级:
发表于:
2008-04-08 18:12:52
28
楼 得分:
0
支持小灰
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zjh2702
等级:
发表于:
2008-04-08 18:20:58
29
楼 得分:
0
sqlHelper类还不错的啦
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
waltguo
多哈了巴基
等级:
发表于:
2008-04-08 19:25:16
30
楼 得分:
0
学习了。,。。我感觉还是原来的好。要是都那么简单了,谁都能做网站了,所以啊程序员的工资低就是这么来的,微软这败类
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
oooo4
等级:
发表于:
2008-04-08 19:38:36
31
楼 得分:
0
精神可佳
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
purple_tide
锦
等级:
发表于:
2008-04-08 19:42:46
32
楼 得分:
0
如果要写的漂亮 或者面向对象 或者编译时类型检查 还是ORM 才是王道
SqlHelper 这个用的人多的和米一样...
不过确实比较实用 轻量 简单 稳定
另外......居然发0分贴~!!
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
purple_tide
锦
等级:
发表于:
2008-04-08 19:43:30
33
楼 得分:
0
忽然想起Linq 让写法更优雅 编译时检查更完善
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
vrhero
人都是逼出来的...
等级:
发表于:
2008-04-08 20:20:01
34
楼 得分:
0
引用 15 楼 iuhxq 的回复:
这么赶时髦很累吧?
如果你把新的工程方法看作赶时髦...那你只能停留在代码工人的境界...
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
Nightyanlovecsharp
小虾
等级:
发表于:
2008-04-08 20:38:32
35
楼 得分:
0
不知外面的人是否都用这个SqlHelp
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
iuhxq
小灰(www.svnhost.cn)
等级:
发表于:
2008-04-08 21:02:40
36
楼 得分:
0
这就是钻牛角尖了。
微软出了c#,那他为什么不用c#来开发vs2005?是不能实现吗?我觉得更多的应该是保护现有投资。
引用 34 楼 vrhero 的回复:
引用 15 楼 iuhxq 的回复:
这么赶时髦很累吧?
如果你把新的工程方法看作赶时髦...那你只能停留在代码工人的境界...
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
boblaw
黑马王子‧偷回忆的人