SqlHelper 类实现详细信息 SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。 在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在 SqlHelper 类中实现的方法包括: ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。 ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。 ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。 ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。 ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。 除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括: AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。 AssignParameterValues:该函数用于为 SqlParameter 对象赋值。 PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。 ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开 SqlDataReader 对象,以便最有效地管理与阅读器关联的连接的有效期。 SqlHelper体验谈: 以下载自CEOCIO(MVP/CSDN_WEB开发版主)的Blog(51aspx.com): 微软提供的Data Access Application Block中的SQLHelper类中封装了最常用的数据操作,各个使用者调用他而写的代码也有很大区别。 对于一个返回DataSet的方法我原来是这样写的:

  1. public DataSet GetDepartmentMemberList(int departmentID)
  2. {
  3. try
  4. {
  5. string sql = "OA_Department_GetDepartment_Members";
  6. string conn = ConfigurationSettings.AppSettings["strConnection"];
  7. SqlParameter[] p =
  8. {
  9. SqlHelper.MakeInParam("@departmentID",SqlDbType.Int,4,departmentID)
  10. };
  11. DataSet ds = SqlHelper.ExecuteDataset(conn,CommandType.StoredProcedure,sql,p);
  12. return ds;
  13. }
  14. catch(System.Data.SqlClient.SqlException er)
  15. {
  16. throw new Exception(er.Message);
  17. }
  18. }

复制代码

现在我是这样来写的: //连接字符串

  1. private string _connectionString = ConfigurationSettings.AppSettings["strConnection"];
  2. public string ConnectionString
  3. {
  4. get {return this._connectionString;}
  5. set {this._connectionString = value;}
  6. }
  7. public DataSet GetNewsToIndexPage(int NewsTypeID)
  8. {
  9. return GetDataSet("yzb_GetNewsToIndexPage",GetNewsToIndexPage_Parameters(NewsTypeID));
  10. }

复制代码

//设置存储过程参数

  1. private SqlParameter[] GetNewsToIndexPage_Parameters(int NewsTypeID)
  2. {
  3. SqlParameter[] p =
  4. {
  5. SqlHelper.MakeInParam("@NewsTypeID",SqlDbType.Int,4,NewsTypeID)
  6. };
  7. return p;
  8. }

复制代码

//这里才真正调用SqlHelper

  1. private DataSet GetDataSet(string sql, params SqlParameter[] p)
  2. {
  3. return SqlHelper.ExecuteDataset(ConnectionString,CommandType.StoredProcedure,sql,p);
  4. }

复制代码

代码更加灵活,更加安全了:P 做为一个懒人,大笨狼51aspx我经常这样写:

  1. System.Data.DataTable dt=SqlHelper.ExecuteDataset(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql).Tables[0];

复制代码

直接返回DataTable, 返回表集合基本不用,只返回一个table用于绑定。 string conn = ConfigurationSettings.AppSettings["strConnection"]; 我写在SqlHelper.CONN_STRING_NON_DTC里面 MakeInParam代码烦琐,如果查询输入条件不可能有组合SQL, 我直接exec pronamr paraargs 如果查询输入条件存在安全问题,或者带返回参数 再用

  1. SqlParameter[] queryParam=new SqlParameter[] {
  2. new SqlParameter("@UserID",SqlDbType.Int)
  3. };
  4. queryParam[0].Value=this.UserID;

复制代码

组合sql语句用到@和string.Format技巧.例如:

  1. sql=@"UPDATE Test_User_Statistic
  2. SET
  3. Test_User_Statistic.[IsQualified]={0},
  4. Test_User_Statistic.[Reason]='{1}'
  5. WHERE UserID={2}" ;
  6. sql= string.Format(sql,IsQualified,Reason,userID);
  7. SqlHelper.ExecuteNonQuery(SqlHelper.CONN_STRING_NON_DTC,CommandType.Text,sql);

复制代码

其中sql语句可以借助SQL的查询分析器生成。这么干要保证安全,如果有输入漏洞,建议还是用SqlParameter[]缓存参数,因为它会把攻击性的代码,比如带单引号分号的,当作普通字符处理。

《新SqlHelper 配置和应用方法详解 》http://blog.csdn.net/bobby96333/article/details/7241289

转载于:https://www.cnblogs.com/johntom/archive/2012/04/06/2435383.html

SqlHelper详解(转载)相关推荐

  1. spring依赖注入原理详解(转载)

    spring依赖注入原理详解----转载 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它.所 ...

  2. Executor框架的详解(转载)

    在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程来执行 ...

  3. vsftpd配置文件详解[转载]

    vsftpd配置文件详解 1.默认配置: 1>允许匿名用户和本地用户登陆.      anonymous_enable=YES      local_enable=YES 2>匿名用户使用 ...

  4. HTTP详解(转载)

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  5. ntp 配置详解(转载后整理汇总)

    ntp 配置详解 一.时间和时区 在LINUX系统中,有许多场合都使用时间戳的方式表示时间,即从1970年1月1日起至当前的天数或秒数. 世界遵循一个标准UTC,中国的标准是CST(北京时间)中国处于 ...

  6. 分布式事务中的三种解决方案详解(转载)

    一.分布式事务前奏 快看小说网事务:事务是由一组操作构成的可靠的独立的工作单元,事务具备ACID的特性,即原子性.一致性.隔离性和持久性. 本地事务:当事务由资源管理器本地管理时被称作本地事务.本地事 ...

  7. SpringMVC 之类型转换Converter详解转载

    SpringMVC之类型转换Converter详解 本文转载 http://www.tuicool.com/articles/uUjaum 1.1     目录 1.1      目录 1.2     ...

  8. VLAN原理详解[转载] 网桥--交换机---路由器

    来自:http://blog.csdn.net/phunxm/article/details/9498829 一.什么是桥接   桥接工作在OSI网络参考模型的第二层数据链路层,是一种以MAC地址来作 ...

  9. SAP 物料分类账CKM3详解(转载)

    原文地址:物料分类账 CKM3详解_SAP小白kenny的博客-CSDN博客_ckm3 业务背景 物料分类账的主要作用在于将实际成本和标准成本的差异分摊到库存和销售成本中,从而实现差异在实际的使用者中 ...

最新文章

  1. oracle anbob,Tag Archives: oracle安装 | ANBOB
  2. tensorflow 集成开发环境 (IDE)
  3. 微软 GitHub 推出新代码搜索工具,面向GitHub编程?
  4. linux文件存储结构,Linux文件存储方式以及软硬链接
  5. Spring+Hibernate整合Hessian
  6. router阻止telnet自身的两种方法
  7. 耗时1个月整理的这份英语资源!一次性全部分享给你,手慢无!
  8. linux service命令
  9. CF1039E Summer Oenothera Exhibition
  10. 实现xml和json接口(第一篇)
  11. 强制删除文件处理程序
  12. autojs利用坚果云实现云更新
  13. excel 如何冻结多行多列
  14. MarkdownNote
  15. ubuntu系统切换高性能模式
  16. 高效的中文字符串截取函数
  17. Android中错误Annotation processors must be explicitly declared now. The following dependencies on the
  18. Ubuntu_ROS 学习
  19. 计算机机房设计相关标准,电子计算机机房设计规范GB50174-93[3]
  20. 虎虎 ( 2008 - 2020-0414 )

热门文章

  1. Linux复习资料——CentOS7下安装MySQL5.7.22(完整版本)
  2. Linux对运行服务操作命令
  3. 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)
  4. Java面试题:如何将字符串反转?(翻转字符串)
  5. GoldenGate SQL error 1403 mapping 错误解决方案
  6. 使用scp、ssh等不用输入密码
  7. Flatten Binary Tree to Linked List - LeetCode
  8. dig指定服务器查询域名解析时间
  9. windows server 注意windows的temp目录
  10. 小知识汇总----不断更新中...