`
lu930124
  • 浏览: 28520 次
  • 性别: Icon_minigender_2
  • 来自: 廊坊
文章分类
社区版块
存档分类
最新评论

SqlHelper——只因为在人群中多看了你一眼

 
阅读更多

对SQLHelper,还是有一点陌生的,但是大多数人都在使用,我就有一种想了解并使用的意愿,于是查了很多资料,发现一片不错的博客,放在下面,作为自己或读者使用的材料。

一、SqlHelper 出场

不是因为大家都在用SqlHelper所以才用,是因为连接数据库关闭数据库查询数据库的多了也就加上了SqlHelper。当你的很多需求都有一个相同的方法的时候我们没有必要完成一个需要就要写一遍代码,完成一个需求写一遍代码,这样不仅会把人累死(当然除了复制粘贴),这样的话会造成代码的重复增加了耦合,产生了冗余。为什么不把相同的代码单独拉出来封装成一个类,这样每个需求使用时只需调用这个被封装的类的相应的方法就好了。

当有多个关于数据库增删改成操作的时候就用到了SqlHelper,因为D层是直接操作数据库,完成数据库的增删改查的,所以SqlHelper是属于D层的,但是我是单独拿出来成为一层的。把D层的所有对数据库的操作方法都封装起来。分为两种操作,一种是增删改,一种是查询操作,而每种又分为有参数的和无参数的。这样减轻了D的负担,使D层不会显得太臃肿。

在做机房之前一直在看别人的博客,总是有提到SqlHelper,所以就在众博客中多看了它一眼。只因为在人群中多看了你一眼,再也不能忘掉你的容颜,在这里写下我一个人对你的情有独钟……


二、SqlHelper 用法

1、首先,它的方法

1)为什么要分成有参数和没有参数的呢?

这就是一种思想了,当想要获取数据库的全部信息和部分信息时,需要全部信息直接给它指定查找哪个表就行,但是当要在一个表中获取一部分信息就要有查询条件,就要有参数。

2)为什么要分为查询和增删改两种呢?

查询是要返回给用户想要查询到的信息,增删改都可以归纳为改或者更新,更新要返回给用户更新的是否成功或失败,不需要返回具体信息。所以查询返回的是DataTable类型,而更新返回受影响的行就行,当更新好一行数据就返回整数1。这就和它的返回值产生了关系,既然有相同的就要合并起来成为一个方法,这样减少冗余,使代码简单化。学了面向对象,其实就是怎么简单怎么来。

2、然后,SqlHelper的每一个方法都要有一个返回值,因为返回值的不同会造成相应调用此方法的方法也要有一样的返回值。

1)返回DataTable

DataTable又是什么呢?

DataTable是一个临时保存数据的网络虚拟表,可以被创建和访问,当SqlHelper查询后就要返回到DataTable虚拟表中,判断它的第一行是否有数据来判断是否查到记录。

2)返回Integer

返回受影响的行数,如果受影响的行数大于0说明查到的记录,如果为0说明没有查询到数据。如果受影响的行数大于0说明增删改操作成功,如果为0,说明操作没有成功。我们通过返回受影响的行数到B层进行逻辑判断,然后返回相应的提示给U层,这样就很好的再一条线中实现。思路清晰。

三、SqlHelper举例应用

下面就举一个返回值是DataTable型的有参数的方法。

  1. '方法(2)有参数的查询
  2. 'returnDataTable查询出的表格
  3. PublicFunctionExecuteNonQuery(ByValcmdTextAsString,ByValcmdTypeAsCommandType,ByValsqlParamsAsSqlParameter())AsDataTable
  4. UsingconnAsNewSqlConnection(strConnection)'使用连接池,可以在使用完成后自动关闭连接
  5. DimcmdAsSqlCommand=conn.CreateCommand()'
  6. cmd.CommandText=cmdText'需要执行的SQL语句
  7. cmd.CommandType=cmdType'给出Sql语句的类型
  8. cmd.Parameters.AddRange(sqlParams)'参数数组,参数个数根据实际情况而定
  9. adp=NewSqlDataAdapter(cmd)
  10. Try
  11. conn.Open()
  12. adp.Fill(ds)
  13. Returnds.Tables(0)
  14. CatchexAsException
  15. ReturnNothing
  16. Throwex
  17. EndTry
  18. EndUsing
  19. EndFunction

它的使用,就拿D层来说,当判断一个用户是否存在时,输入用户名之后,这个用户名就成为了参数,调用SqlHelperExecuteNonQuery()方法,通过返回的DataTable的行数是否大于0来判断此用户是否存在。

  1. PublicFunctionSelectUser(ByValuserAsEntity.UserInfo)AsDataTableImplementsIDAL.IUser.SelectUser
  2. DimstrUserNameAsString=user.UserName
  3. DimhelperAsNewHelper.SqlHelper
  4. DimdtAsNewDataTable'声明一个DataTable类型变量
  5. DimcmdTextAsString="select*fromUser_InfowhereUserName=@UserName"'声明并实例化需要执行的SQL语句
  6. DimsqlParamsAsSqlParameter()={NewSqlParameter("@UserName",strUserName)}'声明并实例化参数
  7. dt=helper.ExecuteNonQuery(cmdText,CommandType.Text,sqlParams)'调用SqlHelper类中的ExecSelect()方法来执行查询,并获取返回值
  8. Returndt'返回查询结果
  9. EndFunction


四、我的SqlHelper的问题

这样就又出现了一个问题,当我们删除用户的时候,或者需要查询到多条记录显示出来的时候,虽然返回的是DataTable类型,但是它默认了返回DataTable的第一行数据,出现这样情况解决方法有两种:

1)通过遍历思想循环查数据库中的记录,返回一条和上一次不同的记录的第一行。

例如返回某一级别的用户

  1. Ifdt.Rows.Count>0ThenFori=0Todt.Rows.Count-1'查到内容显示
  2. DataGridView.Rows.Add()'一开始没有行和列,所以要添加一行和一列,避免发生错误
  3. Forj=0Todt.Columns.Count-1
  4. DataGridView(j,i).Value=dt.Rows(i).Item(j)
  5. Nextj
  6. 'DataGridView.AllowUserToAddRows=False'如果放在这里,还是会有最后一行
  7. Nexti

2)利用绑定数据集

直接dataGridView=table

第二种方法显然是比第一种好很多,但为什么很多人还是要只返回DataTable的第一行数据呢?

这是因为:……^^………我就是不把它循环遍历出来不罢休的人,然后再去尝试第二种方法,


五、我的感悟——SqlHelper

就像设计模式一样,其实一开始并不存在什么设计模式,大加就只是在写代码啊写代码,但是需要写的代码也多了,当时会编程的人又少,就要提高写代码的效率,所以一些设计模式就出现了,面向对象的出现也是有一定的时间积累的,人们需要复用代码,又先要少写代码就能够实现要求,而且是系统软件看起来更简洁,达到高内聚低耦合的效果。如果说设计模式的出现是认识思想的升华,那SqlHelper就是人们思想的结晶。

当我用了SqlHelper的时候一开始会觉得很难,但是会慢慢的发现它的思想它的好处。人们最大的进步就是会使用工具,当有人给我们创造出了工具后我们要做的就是好好的使用工具,然后创造更好的工具给别人使用。

转自:http://blog.csdn.net/xdd19910505/article/details/28469205


分享到:
评论

相关推荐

    SQLHelper中文翻译版本

    SQLHelper中文翻译版本 SQLHelper中文翻译版本 SQLHelper中文翻译版本

    C# sqlhelper多类库

    C# sqlhelper多类库C# sqlhelper多类库C# sqlhelper多类库

    SqlHelper.cs

    SqlHelper是一个基于.NETFrameWork的数据库操作组件,组件中包含操作数据库的各种方法,他封装的目的无疑是简化重复写的数据库连接,当SqlHelper封装以后,只需要给方法传入一些参数,就可以实现对数据库的访问。...

    SqlHelper详细中文注释

    sqlhelper大家都知道,不过下载的多是英文的注释 这是我从网上下载的带中文注释的,看了一下,解释得还算过得去,如果你英文水平一般,看一下还是有好处的

    sqlHelper 中文注释版

    sqlHelper 中文注释版,sqlHelper 中文注释版,sqlHelper 中文注释版

    SQLHelper数据库操作组件

    组件中包含数据库操作方法,SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不...

    GridView中使用SqlHelper分页

    在GridView中使用SqlHelper分页

    SqlHelper(带详细中文注释)

    微软提供的的SQLHelper类,封装了最常用的数据操作,为了方便初学的朋友,上传一个带详细中文注释的SqlHelper。

    SqlHelper.cs 微软的SQLHelper类(含完整中文注释)

    SqlHelper.cs 微软的SQLHelper类 微软的SQLHelper类(含完整中文注释) 非常好的SQLHelper

    sqlhelper(中文)

    这个是中文,比PETshop那个全,比较适合小项目玩玩。

    java连接oracle数据库———sqlHelper类

    NULL 博文链接:https://zhaoxuewei2012.iteye.com/blog/1612229

    微软SqlHelper(原版+中文注释版)

    微软SqlHelper(原版+中文注释版)

    sqlhelper

    SQLHelper类(含完整中文注释)-免费共享

    最新强大而简便的SqlHelper类

    2,所以数据库操作只需要调用SQLHelper中的方法即可.DataAccess类是在SQLHelper类内部调用的类. 3,使用前请先执行以下方法,以进行类初始化: string DBConnectionString = "data source=.;database=Northwind;user id...

    完整SqlHelper类详细中文注释

    完整SqlHelper类详细中文注释

    SqlHelper源码及说明

    // SQLHelper.cs // // This file contains the implementations of the SqlHelper and SqlHelperParameterCache // classes. 这个文件实现了SqlHelper类和SqlHelperParameterCache类 //其中SqlHelper类执行各种方式...

    Sqlhelper

    SqlHelper 类实现详细信息SqlHelper 类用于通过一组静态方法来封装数据访问功能。

    SqlHelper ado.net

    组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,...

    SqlHelper源代码

    SqlHelper源码及使用实例 SqlHelper是非常方便的数据库操作函数,功能强大,使用起来非常简单,免去很多复杂的数据库操作的代码,在多层应用及面向对象开发中都有很多应用 SqlHelper源码带有详细的说明 ...

Global site tag (gtag.js) - Google Analytics