【我的ASP.NET学习笔记】学生成绩查询系统-数据库访问助手类sqlHelp--知识

   sqlHelp是一个基于.NET Framework的数据库操作组件,组件中包含数据库操作方法。无需重复的去写SqlConnection,SqlCommand,SqlDataReader等。SqlHelp封装过后只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了。

   这里的SqlHelp主要包括一个属性和四个方法:


ConnetionStringLocalTransaction:获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改。

public static int ExecuteNonQuery(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters):执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串

public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters):执行一条返回结果集的sqlCommand命令,通过专用的连接字符串

public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters):执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串

private static void PrepareCommand(SqlCommand cmd,SqlConnection conn,SqlTransaction trans,CommandType cmdType,string cmdText,SqlParameter[] cmdParms):为执行命令准备参数


ExecuteNonQuery、ExecuteReader、ExecuteScalar三个方法参数是相同的:

  string connectionString:一个有效的数据库连接字符串

  CommandType cmdType:sqlCommand的命令类型

  string cmdText:存储过程的名字或T-SQL语句

  params SqlParameter[] commandParameters:以数组的形式提供sqlCommand命令中用到的参数列表

PrepareCommand的参数:

 SqlCommand cmd:sqlCommand命令

 SqlConnection conn:已经存在的数据库连接

 SqlTransaction trans:数据库的事务处理

 CommandType cmdType:sqlCommand的命令类型

 string cmdText:Command text,T-SQL语句 例如 Select * from StdInfo

 SqlParameter[] cmdParms:返回带参数的命令


代码如下:

public class sqlHelp  : ApiController

{

    //获取数据库连接字符串,属于静态变量且只读,项目中所有的文档可以直接引用,但不能修改

    public static readonly string ConnetionStringLocalTransaction=

        ConfigurationManager.ConnectionStrings["stdInfoConnectionString"].ConnectionString ;

    /// <summary>

    /// 执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串

    /// 使用参数数组形式提供参数列表

    /// </summary>

    public static int ExecuteNonQuery(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters)

    {

        SqlCommand cmd = new SqlCommand();

        using(SqlConnection conn=new SqlConnection(connectionString))

        {

            //通过PrepareCommand方法将参数逐个加入到sqlCommand的参数集合中  这里的PrepareCommand是一个自定义方法,要去实现

            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

            int val = cmd.ExecuteNonQuery();

            cmd.Parameters.Clear();

            return val;

        }

    }


    /// <summary>

    /// 执行一条返回结果集的sqlCommand命令,通过专用的连接字符串

    /// 使用参数数组提供参数

    /// </summary>

    /// 

    public static SqlDataReader ExecuteReader(string connectionString,CommandType cmdType,string cmdText,params SqlParameter[] commandParameters)

    {

        SqlCommand cmd = new SqlCommand();

        SqlConnection conn = new SqlConnection(connectionString);

        //在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,CommandBehavior.closeConnection的语句就不会执行

        //出发的异常由Catch捕获

        //关闭数据库连接,并通过throw再次引发捕捉到的异常

        try

        {

            PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

            cmd.Parameters.Clear();

            return rdr;

        }

        catch

        {

            conn.Close();

            throw;

        }

    }


    ///<summary>

    ///执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串

    ///使用参数数组提供参数

    ///</summary>

    public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

    {

        SqlCommand cmd = new SqlCommand();

        using (SqlConnection connection = new SqlConnection(connectionString))

        {

            PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);

            object val = cmd.ExecuteScalar();

            cmd.Parameters.Clear();

            return val;

        }

    }


    private static void PrepareCommand(SqlCommand cmd,SqlConnection conn,SqlTransaction trans,CommandType cmdType,string cmdText,SqlParameter[] cmdParms)

    {

        //判断数据库连接状态

        if (conn.State != ConnectionState.Open)

        {

            conn.Open();

        }

        cmd.Connection = conn;

        cmd.CommandText = cmdText;


        //判断是否需要事务处理

        if (trans != null)

            cmd.Transaction = trans;

        cmd.CommandType = cmdType;

        if(cmdParms!=null)

        {

            foreach (SqlParameter parm in cmdParms)

                cmd.Parameters.Add(parm);

        }

    }

}



转载于:https://my.oschina.net/kyzgyen/blog/617353

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值