标题：SqlHelper
什么是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; 
} 
}