什么是ado.net

这篇文章给大家分享的是有关什么是ado.net的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

十年专注成都网站制作,企业网站制作,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于企业网站制作,高端网页制作,对成都边坡防护网等多个方面,拥有丰富的网站运维经验。

一、介绍

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

什么是ado.net

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对象抽象成更具体和数据库类型无关对象。

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

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

        /// 
        /// 提供程序的固定名称
        /// 
        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 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;
            }
        }
    }

感谢各位的阅读!关于什么是ado.net就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!


新闻名称:什么是ado.net
网站路径:http://pwwzsj.com/article/jdoshi.html