首页 后端开发 C#.Net教程 什么是ado.net以及其简单实现详解

什么是ado.net以及其简单实现详解

May 31, 2017 pm 02:32 PM

一、介绍

     ado.net是.net framework的数据提供程序,它主要有SqlConnection、SqlCommand、SqlDataAdapter、SqlDataReader和DataSet五大对象构成,结构如下图

  1.SqlConnection类表示一个sql server数据库的一个连接

    连接字符串格式一般有如下两种形式,具体参数可以参照msdn

               1)Persist Security Info=False;Integrated Security=true;Initial Catalog=Northwind;server=(local)

               2)Server=.;Database=demodb;User=sa;Password=123;

    创建一个连接如下     

      SqlConnection conn = new SqlConnection(connString);

  2.SqlCommand类表示数据库执行命令对象

          1)用来设置需要执行的sql脚本或存储过程、超时时间、参数和事务等。

          2)创建方式如下

              SqlConnection conn = new SqlConnection();

            //方式一

            conn.CreateCommand(); 

            //方式二

            SqlCommand cmd = new SqlCommand();

            cmd.CommandText = "select * from table" ;

            cmd.Connection = conn;

          3)几个主要方法

            ExecuteNonQuery:对连接执行sql语句并返回受影响行数,主要执行增、删和改操作

            ExecuteReader:执行查询返回SqlDataReader对象

            ExecuteScalar:执行查询返回结果集中的第一行和第一列    

     3.SqlDataAdapter类用来填充DataSet和更新数据库数据命令和数据库连接

          该类有4种构造函数如下

        public SqlDataAdapter();

        public SqlDataAdapter(SqlCommand selectCommand);

        public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection);

        public SqlDataAdapter(string selectCommandText, string selectConnectionString);

     4.SqlDataReader类提供一种数据流只进方式读取

     5.DataSet类表示数据在内存中的缓存

二、ADO.NET简单实现

     下面实现一个增、删、改、查的例子


public class EasySqlHelper
    {
        //web.config来配置
        //private static string connString = ConfigurationManager.AppSettings["SqlConnectionString"];
        private static string connString = "Server=.;Database=demodb;User=sa;Password=123;";

        public static int ExecuteNonQuery(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }

                    return cmd.ExecuteNonQuery();
                }
            }
        }

        public static SqlDataReader ExecuteReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader rdr = null;

            try
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }

                rdr = cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                conn.Dispose();
                cmd.Dispose();

                if (rdr != null)
                {
                    rdr.Dispose();
                }

                throw ex;
            }
            finally
            {
                cmd.Dispose();
            }

            return rdr;
        }

        public static DataTable ExecuteDataTable(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }

                    SqlDataAdapter adp = new SqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    adp.Fill(ds);

                    return ds.Tables[0];
                }
            }
        }
    }
登录后复制

  上面代码中使用using来确保资源释放,所有实现IDisposable接口的类都可以用using来释放,即使在调用对象的方法上发生异常也会释放。

三、创建不同提供程序的数据源类实例

     上面代码只对sql server有效,如果要实现不同数据库如oracle则又需要另外写一套代码,.Net提供了DbProviderFactory类来创建不同数据库实例。

     同时上面5大对象也要换成DbConnection、DbCommand、DbDataReader、DbDataAdapter把具体sql server对象抽象成更具体和数据库类型无关对象。


//// <summary>
    /// 连接信息
    /// </summary>
    public class ConnectionInfo
    {
        private string _connectionString;
        private string _providerName;

        /// <summary>
        /// 连接字符串
        /// </summary>
        public string ConnectionString
        {
            get { return _connectionString; }
        }

        /// <summary>
        /// 提供程序的固定名称
        /// </summary>
        public string ProviderName
        {
            get { return _providerName; }
        }

        public ConnectionInfo(string connectionString, string providerName)
        {
            _connectionString = connectionString;
            _providerName = providerName;
        }
    }

    public class MySqlHelper
    {
        private static DbProviderFactory dbProvider;

        private static readonly ConnectionInfo connInfo = new ConnectionInfo("Server=.;Database=demodb;User=sa;Password=123;", "System.Data.SqlClient");

        private static void GetProvider()
        {
            dbProvider = DbProviderFactories.GetFactory(connInfo.ProviderName);
        }

        static MySqlHelper()
        {
            GetProvider();
        }

        public static int ExecuteNonQuery(string sql, DbParameter[] parameters)
        {
            int flag = 0;

            using (DbConnection conn = dbProvider.CreateConnection())
            {
                conn.ConnectionString = connInfo.ConnectionString;
                conn.Open();

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }

                    flag = cmd.ExecuteNonQuery();
                }
            }

            return flag;
        }

        public static void ExecuteReader(string sql, DbParameter[] parameters, Action<IDataReader> action)
        {
            IDataReader rdr = null;
            
            using (DbConnection conn = dbProvider.CreateConnection())
            {
                conn.ConnectionString = connInfo.ConnectionString;
                conn.Open();

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }

                    rdr = cmd.ExecuteReader();

                    action(rdr);

                    rdr.Close();
                }
            }
        }

        public static DataTable ExecuteDataTable(string sql, DbParameter[] parameters)
        {
            DataTable dt = null;

            using (DbConnection conn = dbProvider.CreateConnection())
            {
                conn.ConnectionString = connInfo.ConnectionString;
                conn.Open();

                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    if (parameters != null && parameters.Length > 0)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }

                    IDataReader rdr = cmd.ExecuteReader();

                    dt = new DataTable();
                    dt.Load(rdr);

                    rdr.Close();
                    
                }

                return dt;
            }
        }
    }
登录后复制

四、其它第三方框架

  有Dapper、IBatis.Net等等,可以参考学习下

【相关推荐】

1. ASP.NET免费视频教程

2. C#使用Ado.Net更新和添加数据到Excel表格的方法

3. ADO.NET 读取EXCEL的实现代码((c#))

4. ADO.NET调用存储过程

5. ado.net 连接vs 数据库代码

以上是什么是ado.net以及其简单实现详解的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何通过PHP编写一个简单的在线问卷调查系统 如何通过PHP编写一个简单的在线问卷调查系统 Sep 24, 2023 am 10:21 AM

如何通过PHP编写一个简单的在线问卷调查系统随着互联网的发展和普及,越来越多的人开始倾向于通过网络来进行各种调查和问卷调查。为了满足这一需求,我们可以通过PHP语言编写一个简单的在线问卷调查系统。本文将介绍如何使用PHP实现一个基本的问卷调查系统,并提供具体的代码示例。数据库设计首先,我们需要设计一个数据库来存储问卷调查的相关数据。我们可以使用MySQL数据

如何使用PHP实现一个简单的在线订餐系统 如何使用PHP实现一个简单的在线订餐系统 Sep 26, 2023 am 09:29 AM

如何使用PHP实现一个简单的在线订餐系统随着互联网的普及,订餐行业也逐渐朝向线上发展。为了满足用户的需求,在线订餐系统的开发变得非常重要。本文将介绍如何使用PHP语言来实现一个简单的在线订餐系统,并提供具体的代码示例。定义数据库结构首先,我们需要定义数据库结构来存储订单信息。创建一个名为"orders"的数据表,并定义以下字段:order_id:订单ID

如何使用PHP开发简单的商品评论功能 如何使用PHP开发简单的商品评论功能 Sep 21, 2023 am 08:49 AM

如何使用PHP开发简单的商品评论功能随着电子商务的兴起,商品评论功能成为了一个不可或缺的功能,方便用户之间的交流和消费者对商品的评价。本文将介绍如何使用PHP开发一个简单的商品评论功能,并附上具体的代码示例。创建数据库首先,我们需要创建一个数据库来存储商品评论信息。创建一个名为“product_comments”的数据库,并在其中创建一个名为“comment

如何使用PHP实现简单的在线点餐系统 如何使用PHP实现简单的在线点餐系统 Jun 27, 2023 pm 02:21 PM

今天,我们将通过使用PHP编程语言来实现一个简单的在线点餐系统。PHP是一种流行的服务器端脚本语言,它非常适合用于开发基于Web的应用程序。我们将展示如何使用PHP创建一个简单的点餐系统,用户可以在网站上选择菜品,并将它们添加到他们的购物车中,最后完成交易。开始之前,我们需要创建一个新的PHP项目,并安装必要的依赖项,如数据库和服务器环境。我们将使用MySQ

如何使用PHP实现一个简单的在线商城 如何使用PHP实现一个简单的在线商城 Sep 25, 2023 pm 02:25 PM

如何使用PHP实现一个简单的在线商城随着互联网的发展,电子商务已成为一种常见的购物方式。很多人都想学习如何搭建一个自己的在线商城。本文将介绍如何使用PHP语言实现一个简单的在线商城,并给出具体的代码示例。一、搭建环境首先,我们需要在本地搭建PHP开发环境。推荐使用XAMPP或者WAMP工具来搭建一个集成的开发环境,这样可以避免繁琐的配置工作。二、创建数据库接

如何使用PHP开发简单的商品比较功能 如何使用PHP开发简单的商品比较功能 Sep 21, 2023 am 08:09 AM

如何使用PHP开发简单的商品比较功能,需要具体代码示例随着电商的发展,用户在购物时经常会遇到选择商品的困扰,比如不知道该选择哪个牌子的产品更好,哪个店铺的价格更实惠等。为了解决这个问题,我们可以开发一个简单的商品比较功能,帮助用户方便地对比商品的各项属性,并从中做出选择。本文将介绍如何使用PHP来实现这个功能,并给出具体的代码示例。首先,我们需要创建一个商品

如何使用PHP实现一个简单的在线人才招聘系统 如何使用PHP实现一个简单的在线人才招聘系统 Sep 26, 2023 pm 11:49 PM

如何使用PHP实现一个简单的在线人才招聘系统人才招聘是企业发展中一个重要的环节,随着互联网的发展,越来越多的企业开始采用在线人才招聘系统来简化招聘流程并提高效率。在本文中,我们将介绍如何使用PHP语言来实现一个简单的在线人才招聘系统,并提供具体的代码示例。一、需求分析在实现在线人才招聘系统之前,首先需要明确系统的需求。一个简单的人才招聘系统通常包含以下功能:

Java中如何设计一个简单的课程表管理系统? Java中如何设计一个简单的课程表管理系统? Nov 04, 2023 pm 03:32 PM

Java中如何设计一个简单的课程表管理系统?随着教育的发展和课程的多样化,学校和教育机构需要一个高效的课程管理系统来处理日常的课程安排和调整。Java作为一种广泛使用的编程语言,为我们提供了丰富的工具和库来设计和开发一个简单而实用的课程表管理系统。在设计一个课程表管理系统之前,我们需要明确系统的功能需求。一般来说,一个课程表管理系统需要实现以下功能:管理课程

See all articles