什么是SQLHelper

SqlHelper是一个基于.NETFramework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserver、oracle、access、Mysql数据库,也是一个开源项目,提供免费下载。

SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

编辑本段SqlHelper配置项

[1]在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。

<connectionStrings>

<!--SqlServerHelper连接字符串设定-->

<addconnectionString="server=.;uid=sa;pwd=123456;database=yourdatabase"name="SqlServerHelper"/>

编辑本段SqlHelper调用源码

编写SqlHelper调用代码:

SqlHelper支持多种数据库包括MySql、SqlServer、Oracle、Access数据库,如果的数据库是SqlServer,那么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。

SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用静态方式或对象方式。各和利弊。选择情况使用吧!

第一种,静态方 式,静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建 SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只 执行一个简单的查询语句时,显的更简单,所以这种方式在简单的执行逻辑面前,受到大家的喜爱!

//查询语句执行:

DataTabledt=SqlServerHelper.ReadTable("select * from table1");

//插入语句执行:

SqlServerHelper.ExecuteNonQuery("insertinto [students] values(@student_name,@class)",

SqlServerHelper.CreateInputParameter("@student_name",SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),

SqlServerHelper.CreateInputParameter("@class",SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)

);

简单吧,这让项止显的代码又简单,又清晰!

第二种:面向对象式编程,其实这种语法也不复杂,只是加个using语句而己:

using (SqlServerHelper helper = newSqlServerHelper())

{

helper.Command.CommandText = "deletefrom [Students] where stid=@stid";

helper.AddParameter("@stid",SqlDbType. Int, student_id);

helper.Open();

helper.ExecuteNoneQuery();

helper.Command.Parameters.Clear();

helper.Command.CommandText = "select *from [Students]";return helper.ReadTable();

}

主要成员

在 SqlHelper类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集

ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的结果集

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader。此方法返回 FORXML查询的 XML片段。

除了这些公共方法外,SqlHelper类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand对象能够被执行之前,所有参数都必须添加到 Parameters集合中,并且必须正确设置 Connection、CommandType、CommandText和 Transaction属性。SqlHelper类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的SqlParameter对象连接到正在运行的 SqlCommand。

AssignParameterValues:该函数用于为SqlParameter对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用ExecuteReader实现用于通过适当的 CommandBehavior打开SqlDataReader对象,以便最有效地管理与阅读器关联的连接的有效期。

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Data.SqlClient;
    6. using System.Data;
    7. using System.Configuration;
    8. namespace DAL
    9. {
    10. public class SQLHelp
    11. {
    12. //SqlConnection对象用于建立连接
    13. SqlConnection mycon = new SqlConnection();
    14. //SqlCommand对象用于建立命令
    15. SqlCommand mycom = new SqlCommand();
    16. //用于保存连接字符串
    17. string strConnection = null;
    18. //构造函数,初始化连接
    19. public SQLHelp()
    20. {
    21. strConnection = ConfigurationManager.ConnectionStrings["SqlConnection_Chat"].ConnectionString;
    22. mycon.ConnectionString = strConnection;
    23. //mycon.ConnectionString = "Data Source=.;Initial Catalog=Chat;Integrated Security=True";
    24. }
    25. /// <summary>
    26. /// 执行SQL语句或存储过程,返回数据集
    27. /// </summary>
    28. /// <param name="commandText">SQL语句或存储过程名</param>
    29. /// <param name="para">参数数组</param>
    30. /// <param name="type">执行类型</param>
    31. /// <returns></returns>
    32. public DataSet doExceutForDataset(string commandText, SqlParameter[] para, CommandType type)
    33. {
    34. //定义DataSet存储返回数据集
    35. DataSet ds = new DataSet();
    36. //定义command命令
    37. mycom.CommandText = commandText;
    38. //判断是否有参数,有则循环赋值
    39. if (para != null)
    40. {
    41. for (int i = 0; i < para.Length; i++)
    42. {
    43. mycom.Parameters.Add(para[i]);
    44. }
    45. }
    46. //确定执行类型(SQL语句还是存储过程)
    47. mycom.CommandType = type;
    48. try
    49. {
    50. //打开连接
    51. mycon.Open();
    52. //为command命令指定连接
    53. mycom.Connection = mycon;
    54. //执行command命令
    55. SqlDataAdapter da = new SqlDataAdapter(mycom);
    56. //填充数据集
    57. da.Fill(ds, "table1");
    58. }
    59. catch (Exception e)
    60. {
    61. throw new Exception(e.Message, e);
    62. }
    63. finally
    64. {
    65. //关闭连接
    66. mycon.Close();
    67. }
    68. return ds;
    69. }
    70. /// <summary>
    71. /// 执行SQL语句或存储过程,返回受影响的行数
    72. /// </summary>
    73. /// <param name="commandText">SQL语句或存储过程名</param>
    74. /// <param name="para">参数数组</param>
    75. /// <param name="type">执行类型</param>
    76. /// <returns></returns>
    77. public int doExceutForRowCount(string commandText, SqlParameter[] para, CommandType type)
    78. {
    79. //定义result用于存储返回值
    80. int result = -1;
    81. //定义command命令
    82. mycom.CommandText = commandText;
    83. //判断是否有参数,有则循环赋值
    84. if (para != null)
    85. {
    86. for (int i = 0; i < para.Length; i++)
    87. {
    88. mycom.Parameters.Add(para[i]);
    89. }
    90. }
    91. //确定执行类型(SQL语句还是存储过程)
    92. mycom.CommandType = type;
    93. try
    94. {
    95. //打开连接
    96. mycon.Open();
    97. //为command命令指定连接
    98. mycom.Connection = mycon;
    99. //执行命令,返回受影响的行数
    100. result = mycom.ExecuteNonQuery();
    101. }
    102. catch (Exception e)
    103. {
    104. throw new Exception(e.Message, e);
    105. }
    106. finally
    107. {
    108. //关闭连接
    109. mycon.Close();
    110. }
    111. return result;
    112. }
    113. /// <summary>
    114. /// 用户登录验证 成功返回true
    115. /// </summary>
    116. /// <param name="strUserName">用户名</param>
    117. /// <param name="strPwd">密码</param>
    118. /// <returns></returns>
    119. public bool checkLogin(string strUserName, string strPwd)
    120. {
    121. bool flag = false;
    122. int count = -1;
    123. string strSql = "SELECT COUNT(*) FROM UserInfo WHERE UserName= '" + strUserName + "'and Pwd='" + strPwd + "'";
    124. //Command命令
    125. mycom = new SqlCommand();
    126. mycom.Connection = mycon;
    127. mycom.CommandText = strSql;
    128. //执行Command命令
    129. try
    130. {
    131. mycon.Open();
    132. count = Convert.ToInt32(mycom.ExecuteScalar());
    133. if (count == 0)
    134. {
    135. flag = false;
    136. }
    137. else
    138. if (count > 0)
    139. {
    140. flag = true;
    141. }
    142. }
    143. catch (SqlException ex)
    144. {
    145. throw new Exception(ex.Message, ex);
    146. }
    147. finally
    148. {
    149. mycon.Close();
    150. }
    151. return flag;
    152. }
    153. /// <summary>
    154. ///  执行一条SQL语句,返回第一行第一列的元素
    155. /// </summary>
    156. /// <param name="strSql">SQL语句</param>
    157. /// <returns></returns>
    158. public string doSqlForFirst(string strSql)
    159. {
    160. string result = null;//记录返回元素
    161. mycom = new SqlCommand();
    162. mycom.Connection = mycon;
    163. mycom.CommandText = strSql;
    164. try
    165. {
    166. mycon.Open();
    167. result = mycom.ExecuteScalar().ToString();
    168. }
    169. catch (SqlException ex)
    170. {
    171. throw new Exception(ex.Message, ex);
    172. }
    173. finally
    174. {
    175. mycon.Close();
    176. }
    177. return result;
    178. }
    179. /// <summary>
    180. /// 执行一条SQL语句,返回受影响的行数
    181. /// </summary>
    182. /// <param name="strSql">SQL语句</param>
    183. /// <returns></returns>
    184. public int doSql(string strSql)
    185. {
    186. int result = -1;//记录受影响的行数
    187. //Command命令
    188. mycom = new SqlCommand();
    189. mycom.Connection = mycon;
    190. mycom.CommandText = strSql;
    191. //执行Command命令
    192. try
    193. {
    194. mycon.Open();
    195. result = Convert.ToInt32(mycom.ExecuteNonQuery());
    196. }
    197. catch (SqlException ex)
    198. {
    199. throw new Exception(ex.Message, ex);
    200. }
    201. finally
    202. {
    203. mycon.Close();
    204. }
    205. return result;
    206. }
    207. 执行带参数的sql语句(select语句),返回数据流
    208. }
    209. }

SQLHelper 简介的更多相关文章

  1. EasyFastCMS系列教学课程——2、底层代码 ModelHelper与SQLHelper简介

    从本节课开始,我们开始逐步正式进入实际的编码过程中.本节课的核心内容为SQLHeelper和ModelHelper两个核心类库的介绍. SQLHelper这个类相信大家都很熟悉了,他是微软petsho ...

  2. 关于SqlHelper的详解

    SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法.SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlComma ...

  3. 自制简单的.Net ORM框架 (一) 简介

    在自己研究ORM之前,也使用过几个成熟的ORM方案,例如:EntityFramework,PetaPoco,Dapper 等,用是很好用,但是对自己来说总是不那么方便,EF比较笨重,Dapper要自定 ...

  4. jQuery编程基础精华01(jQuery简介,顶级对象$,jQuery对象、Dom对象,链式编程,选择器)

    jQuery简介 什么是jQuery? jQuery就是一个JavaScript函数库,没什么特别的.(开源)联想SQLHelper类 jQuery能做什么?jQuery是做什么的? jQuery本身 ...

  5. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  6. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  7. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  8. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  9. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

随机推荐

  1. 17.Python笔记之memcached&redis

    作者:刘耀 博客:www.liuyao.me 博客园:www.cnblogs.com/liu-yao 一.Memcached 1.介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动 ...

  2. Java的++自增

    记得大学刚开始学C语言时,老师就说:自增有两种形式,分别是i++和++i,i++表示的是先赋值后加1,++i是先加1后赋值,这样理解了很多年也没出现问题,直到遇到如下代码,我才怀疑我的理解是不是错了: ...

  3. android 中如何分析内存泄漏

    转载:http://blog.csdn.net/fulinwsuafcie/article/details/8363218 前提条件: 1,电脑安装了java 运行环境 2,手机端开启了 USB 调试 ...

  4. .pro配置选项

    在Qt Creator的项目中添加头文件和库   在Qt Creator中的工程中,工程通过.pro文件管理. 额外需要连接的连接库 unix:LIBS += -L your_lib_path -ly ...

  5. 数字型 、String字符串转换

    Java代码 收藏代码 String str = "1,2,3,4,5,6" public int[] StringtoInt(String str) { int ret[] = ...

  6. 【转】c# 协变和逆变

    本文转自:http://www.cnblogs.com/rr163/p/4047404.html C#的协变和逆变 由子类向父类方向转变是协变,用out关键字标识,由父类向子类方向转变是逆变,用in关 ...

  7. Jquery的tmpl

    jquery 中的tmpl类似于asp.net中的datalist控件. 首选,在页面代码中加入两行,jquery的js文件引用 <script src="http://code.jq ...

  8. ORACLE用SYS登录报ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER解决方法

    情况一:使用sqlplus登录 正常输入用户名的口令,就会报错,因为SYS是在数据库之外的超级管理员,所以我们在登录的时候 要在输入口令:口令+as sysdba(比如:123456 as sysdb ...

  9. 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

    解决办法:在项目属性里设置“生成”=>“目标平台”为x86而不是默认的ANY CPU.

  10. Java Applet与Java Application的区别

    转自:http://www.educity.cn/java/500609.html 在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序-- ...