zoukankan      html  css  js  c++  java
  • ADO.NET基础

    一、介绍

         ado.net是.net framework的数据提供程序,它主要有SqlConnection、SqlCommand、SqlDataAdapter、SqlDataReader和DataSet五大对象构成,结构如下图(l来自msdn)
     
      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等等,可以参考学习下

  • 相关阅读:
    YARN简短的建筑
    Codeforces Round #274 (Div. 2) B. Towers
    基于PaaS人事部门间平台多重身份的技术解决方案
    android(9)_数据存储和访问3_scard基本介绍
    google搜索小技巧
    纯CSS实现垂直居中的几种方法
    关于网站的SYN_RECV(SYN_RECEIVED)***的防范措施
    网络的FIN_WAIT_2状态解释和分析
    jQuery对checkbox的各种操作
    0.0.0.0 与 127.0.0.1的区别
  • 原文地址:https://www.cnblogs.com/nxxshxf/p/5591033.html
Copyright © 2011-2022 走看看