什么是SqlHelper.cs文件
SqlHelper.cs是许多年前微软发布的一个使用ADO.Net方法对SQL Server数据库进行操作的封装类。是一个包含优化数据访问代码的.NET组件,它让我们不需要一次又一次重复写相同的数据访问代码,可以减少我们创建、测试、维护等自定义代码的数量。
类中的方法
准备工作,增加DataSource连接字符串(SQL Sever)
<connectionStrings>
<add name="SCCOReportingConn" connectionString="Data Source=服务器;User ID=数据库用户名;Password=数据库密码;persist security info=False;initial catalog=所操作的库名;Connection Timeout=300;" providerName="System.Data.SqlClient" />
</connectionStrings>
//数据库链接字符串
public static readonly string ConnectionString =
ConfigurationManager.ConnectionStrings["SCCOReportingConn"].ConnectionString;
关于DataSet ExecuteDataSet的相关方法
*关于DataSet ExecuteDataSet() 有8个重载方法,详情请看项目的SqlHelper类
ExecuteDataSet方法主要是执行相应的命令,返回一个DataSet数据集合*
/// DataSet dt = ExecuteDataSet(connString,CommandType.StoredProcedure,"GetOrders");
/// <param name="connectionString"> SqlConnection的有效连接字符串 </param>
/// <param name="commandType"> CommandType(存储过程、文本等)</param>
/// <param name="commandText"> 存储过程名称或T-SQL命令</param>
public static DataSet ExecuteDataSet(CommandType commandType, string commandText)
{
return ExecuteDataSet(ConnectionString, commandType, commandText, null);
}
/// DataSet dt = ExecuteDataSet(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
/// <param name="connectionString"> SqlConnection的有效连接字符串</param>
/// <param name="commandType"> CommandType(存储过程、文本等)</param>
/// <param name="commandText"> 存储过程名称或T-SQL命令</param>
/// <param name="commandParameters"> 用于执行命令的SqlParamters数组</param>
public static DataSet ExecuteDataSet(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
//创建和打开一个SqlConnection,并在我们完成后处理它。
using (SqlConnection cn = new SqlConnection(ConnectionString))
{
cn.Open();
//调用采用连接代替的重载
return ExecuteDataSet(cn, commandType, commandText, commandParameters);
}
}
/// DataSet dt = ExecuteDataSet(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
/// <param name="connectionString"> SqlConnection的有效连接字符串</param>
/// <param name="commandType"> CommandType(存储过程、文本等)</param>
/// <param name="commandText"> 存储过程名称或T-SQL命令</param>
/// <param name="commandParameters"> 用于执行命令的SqlParamters数组</param>
public static DataSet ExecuteDataSet(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
//创建一个命令并为执行做好准备
using (SqlCommand cmd = new SqlCommand())
{
PrepareCommand(cmd, connection, null, commandType, commandText,
commandParameters);
//创建数据适配器和数据集
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
//使用数据集名称的默认值填充数据集
da.Fill(ds);
// 从命令对象中分离SqlParameters,以便可以再次使用它们。
cmd.Parameters.Clear();
//return the DataSet
return ds;
}
}
PrepareCommand方法
用于对SqlCommand(命令)的属性(如连接、事务环境等)进行初始化。
//此方法打开(如果需要)并为所提供的命令分配连接、事务、命令类型和参数。
/// <param name="command"> 要准备的SqlCommand(命令)</param>
/// <param name="connection"> 要在其上执行此命令的有效SqlConnection</param>
/// <param name="transaction"> 一个有效的SqlTransaction,或“null”</param>
/// <param name="commandType"> CommandType(存储过程、文本等)</param>
/// <param name="commandText"> 存储过程名称或T-SQL命令</param>
/// <param name="commandParameters"> 一个与命令相关联的SqlParameters数组,如果不需要参数,则为“null”</param>
private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters)
{
//如果提供的连接没有打开,我们将打开它
if (connection.State != ConnectionState.Open)
{
connection.Open();
}
//将连接与命令关联
command.Connection = connection;
//设置命令文本(存储过程名称或SQL语句)
command.CommandText = commandText;
//如果我们被提供了一个事务,分配它。
if (transaction != null)
{
command.Transaction = transaction;
}
//设置命令类型
command.CommandType = commandType;
//如果提供了命令参数,请附加它们
if (commandParameters != null)
{
AttachParameters(command, commandParameters);
}
return;
}
AttachParameters方法
添加参数数组到指定的SqlCommand中
///此方法用于将SqlParameters数组附加到SqlCommand
///此方法将给任何方向为的参数赋值DbNull
/// InputOutput和一个null值
///此行为将阻止使用默认值,但是///这种情况比预期的纯输出参数(派生为InputOutput)更少见
///其中用户不提供输入值
/// <param name="command"> 将向其添加参数的命令</param>
/// <param name="commandParameters"> 将一个SqlParameters数组添加到命令中</param>
private static void AttachParameters(SqlCommand command, SqlParameter[]
commandParameters)
{
foreach (SqlParameter p in commandParameters)
{
//检查有没有赋值的派生输出值
if ((p.Direction == ParameterDirection.InputOutput) && (p.Value == null))
{
p.Value = DBNull.Value;
}
command.Parameters.Add(p);
}
}
关于SqlDataReader ExecuteReader的相关方法
SqlDataReader ExecuteReader() 有9个重载方法,详情请看项目的SqlHelper类
此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。
// 对所提供的SqlConnection执行一个SqlCommand(返回resultset,不接受任何参数)
// connection: 一个有效的SqlConnection
// commandType: CommandType(存储过程、文本等)
// commandText: 存储过程名称或T-SQL命令
// 返回结果: 包含命令生成的结果集的SqlDataReader
public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText)
{
try
{
return ExecuteReader(connection, commandType, commandText, null);
}
catch (Exception)
{
throw;
}
}
// 使用提供的参数对指定的SqlConnection执行SqlCommand(返回resultset)。
// connection: 一个有效的SqlConnection
// commandType: CommandType(存储过程、文本等)
// commandText: 存储过程名称或T-SQL命令
// commandParameters: 用于执行命令的SqlParamters数组
// 返回结果: 包含命令生成的结果集的SqlDataReader
public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
// 我们在这里使用try/catch,因为如果方法抛出异常,我们希望这样做
// 关闭连接抛出代码,因为将不存在datareader,因此
// commandBehaviour。密切联系是行不通的
try
{
PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
connection.Close();
throw;
}
}