SqlHelper类的使用(C#)(1)

什么是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;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值