91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是ado.net

發布時間:2020-10-16 15:31:22 來源:億速云 閱讀:231 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關什么是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對象抽象成更具體和數據庫類型無關對象。

//// <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;
            }
        }
    }

感謝各位的閱讀!關于什么是ado.net就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涪陵区| 十堰市| 观塘区| 通海县| 池州市| 平阳县| 鄄城县| 简阳市| 项城市| 如东县| 平乐县| 汉沽区| 库尔勒市| 唐河县| 徐州市| 金川县| 奇台县| 若羌县| 泰州市| 华池县| 界首市| 孟连| 墨脱县| 增城市| 乐山市| 浦江县| 横峰县| 霍州市| 韩城市| 织金县| 长宁区| 长治县| 肇庆市| 香港| 赤水市| 丹阳市| 江华| 浦城县| 本溪| 大化| 松原市|