加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

关于ADO.NET中的几大对象的介绍使用的个人心得

发布时间:2020-12-12 13:04:14 所属栏目:MsSql教程 来源:网络整理
导读:这两天因为准备企业的笔面试,特地回头看了一下ADO.NET,发现还是有很多不是很理解的地方,重新再翻过之后,特地把自己所理解的东西写下来。 关于ADO.NET,有几个很重要的对象,在这里只介绍:SqlConnection,SqlCommand,SqlDataAdapter,SqlDataReader,DataSe

这两天因为准备企业的笔面试,特地回头看了一下ADO.NET,发现还是有很多不是很理解的地方,重新再翻过之后,特地把自己所理解的东西写下来。

关于ADO.NET,有几个很重要的对象,在这里只介绍:SqlConnection,SqlCommand,SqlDataAdapter,SqlDataReader,DataSet,DataTable,SqlParameter.

1.SqlConnection,词义很明显的告诉咱么,是用来建立与数据库的连接的,是应用程序与数据源之间的桥梁,一般情况下用用这种方式来建立连接:

SqlConnection conn = new SqlConnection(connStr)//connStr是数据库连接字符串
实际上就是实例化一个数据库连接对象,并且把连接要用上的信息整合成一个一定格式的字符串并且当做参数传给SQLConnection对象的构造函数。而数据库连接字符串是个经常要被使用到的字符串变量,所以要对它进行一些处理,要知道连接字符串并不是一成不变的,我们无法在每个需要它的地方去定义它,因为一旦要进行修改,那么工作量会很大,我们要让它在应用程序中能够被重用,可能首先想到的是可以将连接字符串封装到一个全局变量中,比如放到一个公有的静态类中(public static),这样做的话的确可以在程序的任何地方都能访问到它,但是有一个不科学的地方就是一旦连接字符串被修改,那么整个项目都要重新编译和部署。目前来说较为常用的方法是将连接字符串写入到网站的配置文件中,在需要的时候通过ConfigurationManager类来进行调用,代码如下:

//在配置文件中的配置代码如下
<connectionStrings>
<add name="connStr" connectionString="server=服务器名称;database=数据库名称;uid=用户名;password=密码"/>
<connectionStrings/>

//在后台通过以下代码来进行调用:
string connStr = ConfigrationManager.ConnectionStrings["connStr"].ConnectionString;

2.SqlCommand,简单的说,该对象的作用是负责对数据库执行所需要的sql命令。该对象的创建有好几种方法,但是其实都是一样,我所知的就有是三种:分别是使用带参的构造函数创建,使用不带参的构造函数创建,使用SqlConnection对象的createCommand方法,在这里只介绍一下常用的一种方法,其他方法其实也很简单。

SqlCommand cmd = new SqlCommand(sql语句,sqlConnection对象);

再介绍该对象的两个常用的方法:ExecuteScalar(),这个方法返回查询结果的首行首列的值

? ?ExecuteReader(),这个方法用来执行返回一个DataReader对象。在这里就必须要介绍一下DataReader了,它是一个数据读取器,可以快速的从数据库中检索记录信息,数据读取器对象使用的是一个活动的数据连接,因此应该快速使用,并且立即将其关闭,实际上这个对象非常简答, 它只支持快速向前只读方式来访问记录,但是这种方式正式快速检索所需要的,它的性能比DataSet要好,对于直接数据访问形式来说,它一般都是首选。并且DataReader的read()方法能快速往下读取数据,一次读一行,并且通过字段名取出读取的那一行的某一列的内容。代码如下:

SqlDataReader reader = cmd.ExecuteReader();
while(reader.read()){
    string text1 = reader["字段名1"];
    string text2 = reader["字段名2"];
}
//在获取数据读取器DataReader之后,也可以用DataTable的load方法装载读取器,获取数据库查询出来的全部内容到DataTable中
//这是用DataTable获取查询出来的内容的一种很常用的方法
SqlDataReader sdr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.load(sdr);
3.SqlDataAdapter,也叫数据适配器,它的作用是连接数据源与DataSet数据集,用数据库中的内容来填充数据集,将数据集中的内容更新到数据库,而SqlAdapter就是两者之间的桥梁,需要注意的是,DataSet是将数据源中的所有数据都加载到自己里面,然后关闭数据连接,这是一种缓存技术,利用空间换取时间,在进行再次或者多次面向相同数据源的查询时能大大加快查询速度。代码如下:

SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.fill(ds,"Authors");//该数据命令在数据集中创建一个名为Author的新数据表
//如果需要的话,可以不断的修改cmd的commandText属性,来多次用适配器进行不同表的填充,因为DataSet本来就是由一张或者多张数据表(DataTable)组成,而DataTable是由DataColumn,DataRelation,constrain,DataRow对象组成。
4.SqlParameter,用来给参数赋值的一个类,将用法贴出来:

SqlParameter [] paras = new SqlParameter[]{
    new SqlParameter("@parameter(参数名)",参数值),new SqlParameter("@parameter(参数名)",......
};
//将参数添加进参数数组中后,就可以开始执行参数化查询了
cmd.Parameters.AddRange(paras);
SqlDataReader sdr = cmd.ExecuteReader();

以上只是粗略的介绍几个对象的常规使用方法,下面贴出我自己的一个数据库助手类来在实践中进行理解


namespace DAL
{
    public class SQLhelper
    {
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;
        public SQLhelper() {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            conn = new SqlConnection(connStr); 
        }
        //只是对外提供访问连接对象的方法,并没有将具体实现暴露
        private SqlConnection getConn() {
            if (conn.State == ConnectionState.Closed) {
                conn.Open();
            }
            return conn;
        }
        /// <summary>
        /// 此方法用来执行不带参数的增删改SQL语句或者存储过程
        /// </summary>
        /// <param name="cmdText">SQL语句或者存储过程的内容</param>
        /// <param name="ct">要执行的内容的类型,属性值为Text或者StoreProcedure</param>
        /// <returns>返回数据表中受影响的行数</returns>
        public int ExecuteNonQuery(string cmdText,CommandType ct) {
            int res;
            try
            {
                cmd = new SqlCommand(cmdText,getConn());
                cmd.CommandType = ct;
                res = cmd.ExecuteNonQuery();                                                                                                             
            }
            catch (Exception ex) { throw ex; }
            finally
            {
                if (conn.State == ConnectionState.Open) {
                    conn.Close();
                }
            }
            return res;
        }
        /// <summary>
        /// 此方法用于执行带参数的增删改SQL语句或者存储过程
        /// </summary>
        /// <param name="cmdText">SQL语句或者存储过程的内容</param>
        /// <param name="ct">类型,Text或者StoreProced</param>
        /// <param name="paras">参数集</param>
        /// <returns>受影响的行数</returns>
        public int ExecuteNonQuery(string cmdText,CommandType ct,SqlParameter[] paras) {
            int res;
            //使用using语句也可以用来释放资源
            using (cmd = new SqlCommand(cmdText,getConn()))
            {
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                res = cmd.ExecuteNonQuery();
            }
            return res;
        }
        /// <summary>
        /// 此方法用于执行不带参数的SQL查询语句或者存储过程
        /// </summary>
        /// <param name="cmdText">语句或者存储过程名</param>
        /// <param name="ct">类型,Text或者StoreProcedure</param>
        /// <returns>返回一个DataTable</returns>
        public DataTable ExecuteQuery(string cmdText,CommandType ct) {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmdText,getConn());
            cmd.CommandType = ct;
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }
        /// <summary>
        /// 此方法用于执行带参数的查询SQL语句或者存储过程
        /// </summary>
        /// <param name="cmdText">SQL语句名或者存储过程名</param>
        /// <param name="ct">类型,Text或者StoreProcedure</param>
        /// <param name="paras">参数集</param>
        /// <returns>返回查询出来的数据的DataTable</returns>
        public DataTable ExecuteQuery(string cmdText,SqlParameter[] paras) {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmdText,getConn());
            cmd.CommandType = ct;
            cmd.Parameters.AddRange(paras);
            using (sdr = cmd.ExecuteReader())
            {
                dt.Load(sdr);
            }
            return dt;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读