SqlHelper

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

编辑本段什么是SQLHelper

SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,目前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连接字符串设定-->
<add connectionString="server=.;uid=sa;pwd=123456;database=yourdatabase" name="SqlServerHelper"/>
<!--Oracle连接字符串设定-->
<add connectionString="Data Source=orcl;User Id=system;Password=***;Integrated Security=no" name="OracleHelper"/>
<!--MySql连接字符串设定-->
<add connectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase" name="MySqlHelper"/>
</connectionStrings>

编辑本段SqlHelper调用源码

编写SqlHelper调用代码:
SqlHelper支持多种数据库包括MySql、SqlServer、Oracle、Access数据库,如果的数据库是SqlServer,那么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。
SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用 静态方式或对象方式。各和利弊。选择情况使用吧!
第一种, 静态方式,静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只执行一个简单的查询语句时,显的更简单,所以这种方式在简单的执行逻辑面前,受到大家的喜爱!
//查询语句执行:
DataTable dt=SqlServerHelper.ReadTable("select * from table1");
//插入语句执行:
SqlServerHelper.ExecuteNonQuery("insert into [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 = new SqlServerHelper())
{
helper.Command.CommandText = "delete from [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();
}
这是官方示例代码中的一部分,语法简单,在一个using语句中执行了delete删除语句和select查语句。
比如,如果你想执行 事务时,可以使用:
using (SqlServerHelper helper = new SqlServerHelper())
{
helper.Command.CommandText = "delete from [Students] where stid=@stid";
helper.AddParameter("@stid", SqlDbType. Int, student_id);
helper.Open();
DbTransaction tran = helper.Connection.BeginTransaction();
helper.Command.Transaction=tran;
try
{
helper.ExecuteNoneQuery();
tran.Rollback();
}catch { tran.Rollback(); throw; }
}

编辑本段主要成员

在 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 对象,以便最有效地管理与 阅读器关联的连接的有效期。

编辑本段注意事项

1、如果使用SqlHelper方法调用数据库 存储过程,需要获取存储过程的返回值,请使用带有SqlParameter[]参数的方法,Object[]参数的方法无法获取存储过程返回值

编辑本段源程序(中文注释)

/// <summary>
/// 自定义访问通用类
/// </summary>
public class SqlDbHelper
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
/// <summary>
///  构造函数
/// </summary>
public SqlDbHelper()
{
}
/// <summary>
/// ExecuteNonQuery操作,对数据库进行 增、删、改 操作((1)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <returns> </returns>
public int ExecuteNonQuery(string sql)
{
return ExecuteNonQuery(sql, CommandType.Text, null);
}
/// <summary>
/// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(2)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型( 存储过程、SQL文本) </param>
/// <returns> </returns>
public int ExecuteNonQuery(string sql, CommandType commandType)
{
return ExecuteNonQuery(sql, commandType, null);
}
/// <summary>
/// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(3)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <param name="parameters">参数数组 </param>
/// <returns> </returns>
public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
{
int count = 0;
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = commandType;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
connection.Open();
count = command.ExecuteNonQuery();
}
}
return count;
}
/// <summary>
/// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(1)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <returns> </returns>
public DataSet ExecuteDataSet(string sql)
{
return ExecuteDataSet(sql, CommandType.Text, null);
}
/// <summary>
/// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(2)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <returns> </returns>
public DataSet ExecuteDataSet(string sql, CommandType commandType)
{
return ExecuteDataSet(sql, commandType, null);
}
/// <summary>
/// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(3)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <param name="parameters">参数数组 </param>
/// <returns> </returns>
public DataSet ExecuteDataSet(string sql, CommandType commandType, SqlParameter[] parameters)
{
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = commandType;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
}
}
return ds;
}
/// <summary>
/// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(1)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <returns> </returns>
public DataTable ExecuteDataTable(string sql)
{
return ExecuteDataTable(sql, CommandType.Text, null);
}
/// <summary>
/// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(2)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <returns> </returns>
public DataTable ExecuteDataTable(string sql, CommandType commandType)
{
return ExecuteDataTable(sql, commandType, null);
}
/// <summary>
/// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(3)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <param name="parameters">参数数组 </param>
/// <returns> </returns>
public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters)
{
DataTable data = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = commandType;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(data);
}
}
return data;
}
/// <summary>
/// ExecuteReader执行一查询,返回一 SqlDataReader对象实例(1)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <returns> </returns>
public  SqlDataReader ExecuteReader(string sql)
{
return ExecuteReader(sql, CommandType.Text, null);
}
/// <summary>
/// ExecuteReader执行一查询,返回一 SqlDataReader对象实例(2)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <returns> </returns>
public  SqlDataReader ExecuteReader(string sql, CommandType commandType)
{
return ExecuteReader(sql, commandType, null);
}
/// <summary>
/// ExecuteReader执行一查询,返回一 SqlDataReader对象实例(3)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <param name="parameters">参数数组 </param>
/// <returns> </returns>
public  SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sql, connection);
command.CommandType = commandType;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
connection.Open();
return command.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <summary>
/// ExecuteScalar执行一查询,返回查询结果的第一行第一列(1)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <returns> </returns>
public Object ExecuteScalar(string sql)
{
return ExecuteScalar(sql, CommandType.Text, null);
}
/// <summary>
/// ExecuteScalar执行一查询,返回查询结果的第一行第一列(2)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <returns> </returns>
public Object ExecuteScalar(string sql, CommandType commandType)
{
return ExecuteScalar(sql, commandType, null);
}
/// <summary>
/// ExecuteScalar执行一查询,返回查询结果的第一行第一列(3)
/// </summary>
/// <param name="sql">要执行的SQL语句 </param>
/// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
/// <returns> </returns>
public Object ExecuteScalar(string sql, CommandType commandType, SqlParameter[] parameters)
{
object result = null;
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = commandType;
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
}
connection.Open();
result = command.ExecuteScalar();
}
}
return result;
}
/// <summary>
/// 返回当前连接的数据库中所有由用户创建的数据库
/// </summary>
/// <returns> </returns>
public DataTable GetTables()
{
DataTable data = null;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
data = connection.GetSchema("Tables");
}
return data;
}
}
分类:  ASP.NET
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2013/04/18/3027917.html ,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
SQL 数据库
编写SQLHelper类
编写SQLHelper类
46 1
|
设计模式 存储 数据库
【机房重构】——Sqlhelper
【机房重构】——Sqlhelper
87 0
|
数据库
C#DBHelper_FactoryDB_GetConn
C#DBHelper_FactoryDB_GetConn
89 0
C#DBHelper_FactoryDB_GetConn
|
SQL Java 数据库连接
JDBC中execute,executeQuery和executeUpdate的区别
JDBC中execute,executeQuery和executeUpdate的区别
234 0
|
存储 SQL 数据库连接
浅谈ADO.NET中的对象——Connection、Command、DataReader、DataAdapter、DataSet、DataTable
可能是当初没有好好总结的缘故,学习.NET以来,对ADO.NET中的对象一直有些模糊,今天重新回顾了一下,通过查资料,总结,结合自己的观点整理一下ADO.NET中Connection、Command、DataReader、DataAdapter、
浅谈ADO.NET中的对象——Connection、Command、DataReader、DataAdapter、DataSet、DataTable
|
数据库 数据库连接 SQL