你还在用SqlParameter吗?早过时了

iuhxq 2008-04-07 06: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的使用

大家觉得这么做有没有什么坏处?
...全文
1482 75 打赏 收藏 转发到动态 举报
写回复
用AI写文章
75 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bj_junxia 2010-11-08
  • 打赏
  • 举报
回复
我也是用的微软的sqlhelp,挺好用的
virusswb 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iuhxq 的回复:]
我发本贴的目的是告诉一些网友(姑且称之为菜鸟吧),SqlHelper可以这么用,不要再自己new Sqlparameter实例了。太麻烦了,还要设置参数类型,长度,值。


大家不信可以在论坛里搜索下,看有多少使用SqlHelper的,还在new SqlParameter,我是看到了这么用很麻烦,不知道直接调用object的有什么不妥。
[/Quote]用object的不妥就是boxing和unboxing带来的开销问题,是不是支持泛型就好多了呢
sqlhelper内部封装了sqlparameter,我们使用方便多了
iuhxq 2008-04-17
  • 打赏
  • 举报
回复
这么可爱的女孩,是你女儿?
richar1980 2008-04-15
  • 打赏
  • 举报
回复
喂!干吗用我女儿的照片。这是有产权的。
Erice 2008-04-15
  • 打赏
  • 举报
回复
Object 代替Parameters 没什么不好。但是可能存在一个 系统内部隐式转换 会影响 数据访问层使用的数据库

例如 sql server 中有字段定义为 char(50),这个时候,使用消费者传入 Object[]中的类型为string,但是实际上framework会将string 转换为nvarchar类型。如果这个是用于查询的,那么,这样会直接导致 查询索引方式实效。如果以前使用的命中方式是 索引定位,那么回变成索引扫描
深圳小武 2008-04-15
  • 打赏
  • 举报
回复
汗哦,我一年多以前就一直就sqlhelper了,没想到还真有这么多还还在用sqlparameters,多麻烦呀
benbenkui 2008-04-14
  • 打赏
  • 举报
回复
楼主,你为什么不早发这贴呢!
害得我SqlParameters很长一段时间,决定从此告别SqlParameters
twin21cn 2008-04-11
  • 打赏
  • 举报
回复
路过,我是菜鸟还在使用SqlParameters
zpcoder 2008-04-09
  • 打赏
  • 举报
回复
好像没有什么意思。都是一样的。
是个C# asp.net 的人都知道sqlhelper.cs
iuhxq 2008-04-09
  • 打赏
  • 举报
回复
兄弟,不是所有人都像你一样高手,很多菜鸟还不会的,我只是为了分享一下我的知识,我没有把它当成低级的东西,相反我觉得这个类特别适用,尤其是做中小网站、项目。做中小网站,最重要的就是开发效率。当然老板可能不希望你开发的太快,他希望要稳定,产品要好。才不会管你是否在加班写N个new SqlParameter呢
[Quote=引用 46 楼 wuye 的回复:]
引用 2 楼 gaojian001 的回复:
早就听说过微软的这个类库,但没多少人用,不知道为什么。有没有人可以讲讲具体有什么坏处?


太多的项目用了.或者都是有自己的一套类似的

像楼主两颗五角星啦 竟然还在说这种低级的东西.唉
[/Quote]
boblaw 2008-04-09
  • 打赏
  • 举报
回复
[Quote=引用 56 楼 purple_tide 的回复:]
.net c++ 有些情况下性能是差不多
例如性能主要取决于IO 或者是网络的时候

更多的时候性能取决于解决方案 写代码人的水平 而不是语言

当然如果你要用.net开发3d游戏那肯定是顶不住了
注: 主要不是因为性能问题 现在的机器性能都跑的动 关键是.net的垃圾回收会导致一定时间的无响应

VB那丫的性能并不好
[/Quote]
說是沒用的,不如寫個範例給我看看,讓我知道.net c++ 有些情况下性能是差不多的(包括內存和CPU以及執行速度的衡量)?
因為我沒有辦法寫出來,所以我肯定的認為傳統win32的運行效率超出.net。

實話說,我感覺說.net和傳統win32開發工具(特別是vc)性能差不多的人,80%以上沒有真正做過win32開發。大多數衹是在安慰自己而已。
誠如vrhero 所說:“使用工具得先搞清楚工具用在什么地方才能发挥其最大效能”
卧湿菜鸟 2008-04-09
  • 打赏
  • 举报
回复
唉,都说得我一头雾水,

嗯,ORM有没有可以推荐的,或者谁有资料???麻烦指点一下
iuhxq 2008-04-09
  • 打赏
  • 举报
回复
这句我喜欢,呵呵,真的,用类似于在数据库的“企业管理器里执行存储过程”这种代码,就exec 一下存储过程,后面跟着参数,就是为了省事。而且是超级省事的。如果不用代码生成工具,我觉得似乎不能再更加省事了。


[Quote=引用 57 楼 vrhero 的回复:]
.NET的优势不是性能而是开发效率...真正考虑性能的应用不会指望.NET...至少目前还是如此...

.NET的应用领域是企业应用所以更注重工程方法而不是局部性能...

使用工具得先搞清楚工具用在什么地方才能发挥其最大效能...
[/Quote]
vrhero 2008-04-09
  • 打赏
  • 举报
回复
.NET的优势不是性能而是开发效率...真正考虑性能的应用不会指望.NET...至少目前还是如此...

.NET的应用领域是企业应用所以更注重工程方法而不是局部性能...

使用工具得先搞清楚工具用在什么地方才能发挥其最大效能...
purple_tide 2008-04-09
  • 打赏
  • 举报
回复
.net c++ 有些情况下性能是差不多
例如性能主要取决于IO 或者是网络的时候

更多的时候性能取决于解决方案 写代码人的水平 而不是语言

当然如果你要用.net开发3d游戏那肯定是顶不住了
注: 主要不是因为性能问题 现在的机器性能都跑的动 关键是.net的垃圾回收会导致一定时间的无响应

VB那丫的性能并不好
rangeon 2008-04-09
  • 打赏
  • 举报
回复
路过,学习
Phoxe_bai 2008-04-09
  • 打赏
  • 举报
回复
支持小灰

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
xhan2000 2008-04-09
  • 打赏
  • 举报
回复
DAAB才是正统
SeerMi 2008-04-09
  • 打赏
  • 举报
回复
直接执行一句sql就可以了,如果照楼主的说法

"exec p_Delete "+id.ToString() 应该效果也一样
octverve 2008-04-09
  • 打赏
  • 举报
回复
Enterprise Library是最佳实践,而不是理论,是对很多有影响力的软件企业通过多年的开发实践积累下来的技术的整合。
加载更多回复(52)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧