SqlCommand的三种方法以及封装SqlHelper类

SqlCommand的三种方法:
执行时必须保证SqlConnection是处于open状态
ExecuteNonQuery 执行T-SQL,返回受影响的行数 。 增、删、改的通用方法
ExecuteScalar 执行查询,返回结果集的第一行第一列数据
ExecuteReader 执行查询,生成SqlDataReader

构建一个SqlCommand

参数说明:
conn:连接对象
sql:执行的T-SQL语句或存储过程
cmdType:连接类型 1:表示执行T-SQL语句 2:表示执行一个存储过程
trans:表示是否执行一个事务,不执行时,可以传入null值
paras:SqlCommand的参数列表
以下封装好的方法会返回一个所需要的SqlCommand命令,并确保已经开SqlConnection

private static SqlCommand BuilderCommand(SqlConnection conn, string sql, int cmdType, SqlTransaction trans,params SqlParameter[] paras)
{
    if (conn == null)
    {
        throw new ArgumentNullException("连接对象不能为空!");
    }
    SqlCommand command = new SqlCommand(sql, conn);
    if (cmdType==2)
        command.CommandType = CommandType.StoredProcedure;
    if (conn.State == ConnectionState.Closed)
        conn.Open();
    if (trans != null)
        command.Transaction = trans;
    if (paras != null && paras.Length > 0)
    {
        command.Parameters.Clear();
        command.Parameters.AddRange(paras);
    }
    return command;
}

封装ExecuteNonQuery:

public static int ExecuteNonQuery(string sql,int cmdType,params SqlParameter[] parameters)
{
    //select @@Identity 返回上一次插入记录时自动产生的ID
    int result = 0;//返回结果
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        //执行脚本的对象cmd
        SqlCommand cmd = BuilderCommand(conn, sql, cmdType, null, parameters);
        result = cmd.ExecuteNonQuery();//执行T-SQL并返回受影响行数
        cmd.Parameters.Clear();
    }
    //using原理:类似于try finally
    return result;
}

封装ExecuteScalar:

public static object ExecuteScalar(string sql,int cmdType, params SqlParameter[] parameters)
{
    //params 只能写在一维数组之前,且只能标识参数列表中的最后一个参数
    //select @@Identity 返回上一次插入记录时自动产生的ID
    object result = null;//返回结果
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        //执行脚本的对象cmd
        SqlCommand cmd = BuilderCommand(conn, sql, cmdType, null, parameters);
        result = cmd.ExecuteScalar();//执行T-SQL并返回第一行第一列的值
        cmd.Parameters.Clear();
        if (result == null || result == DBNull.Value)
        {
            return null;
        }
        else
        {
            return result;
        }
    }                   
}

封装SqlDataReader:

这个方法不使用using语句块,是因为不能释放连接

public static SqlDataReader ExecuteReader(string sql,int cmdType,params SqlParameter[] parameters)
{
    SqlConnection conn = new SqlConnection(connStr);
    //通过BuilderCommand方法,保证open连接了
    SqlCommand cmd = BuilderCommand(conn, sql, cmdType, null, parameters);
    SqlDataReader reader;
    try
    {
        reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return reader;
    }
    catch (Exception ex)
    {
        conn.Close();
        throw new Exception("创建reader对象发生异常", ex);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值