>  기사  >  백엔드 개발  >  ado.net이란 무엇이며 간단한 구현 세부 사항

ado.net이란 무엇이며 간단한 구현 세부 사항

伊谢尔伦
伊谢尔伦원래의
2017-05-31 14:32:273463검색

一、介绍

     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;연결 문자열 형식은 일반적으로 다음 두 가지 형식을 갖습니다. 매개변수는 msdn을 참조할 수 있습니다.

    创建一个连接如下     

      SqlConnection

 conn =다음과 같이 연결을 생성하세요 new 

connString);  2.SqlCommand类表示数据库执行命令对象    SqlConnectionnew      

SqlCommand cmd =

  new   SqlCommand (); 1) 실행해야 하는 SQL 스크립트나 저장 프로시저, 타임아웃, 매개변수, 트랜잭션 등을 설정하는 데 사용합니다.

            cmd.CommandText =   "select * from table"   ; 2) 생성 방법은 다음과 같습니다.

            cmd.Connection = conn;           3)几个主要方法             ExecuteNonQuery:对连接执行sql语句并返回受影响行数,主要执行增、删和改操作 🎜 🎜🎜🎜 🎜 🎜🎜 🎜🎜🎜🎜🎜🎜🎜

🎜🎜

🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 conn.CreateCommand🎜🎜🎜

🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜

🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜

🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 cmd.CommandText =🎜🎜🎜🎜

🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜 cmd.Connection = conn🎜

🎜 🎜 🎜 🎜 🎜 3 ) 여러 가지 주요 메서드

🎜 🎜 🎜 🎜 🎜🎜🎜ExecuteNonQuery: 연결에서 SQL 문을 실행하고 영향을 받은 행 수를 반환하며 주로 추가, 삭제 및 작업 수정

            ExecuteReader:执行查询返回SqlDataReader对象

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

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

          该类有4种构造函数如下           이 클래스에는 다음과 같은 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;
            }
        }
    }
위 코드는 SQL Server에만 유효합니다. oracle과 같은 다른 데이터베이스를 구현하려면 .Net에서 생성할 다른 코드 세트를 작성해야 합니다. 다른 데이터베이스 인스턴스.

四、其它第三方框架동시에 위의 5개 주요 개체도 DbConnection, DbCommand, DbDataReader 및 DbDataAdapter로 대체되어 특정 SQL Server 개체를 더 많은 개체로 추상화해야 합니다. 데이터베이스 유형과 관련이 없는 특정 개체입니다.


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

【相关推荐】

1. 

ASP.NET免费视频教程

p>

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

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

3.4. ADO.NET调用存储过程

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

5.🎜🎜

위 내용은 ado.net이란 무엇이며 간단한 구현 세부 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.