首頁 後端開發 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)

# . =sa;Password=123;

    建立一個連線如下

      SqlConnection## conn = Connection SqlConnection## conn = Connection ##(connString);  

2.SqlCommand

類別表示資料庫執行指令物件          1)用來設定需要執行的sql腳本或預存程序、逾時時間、參數和交易等。

          2)建立方式如下

          

   

SqlConnectionc();            //

## CreateCommand();            

 

//方式二

 SqlCommand cmd = new

 

SqlCommand();## cmd.CommandText = "select * from table" ;

            cmd.Connection = conn; 3)幾個主要方法            ExecuteNonQuery:對連線執行sql語句並傳回受影響行數,主要執行增、刪和改運算

            ExecuteReader:執行查詢返回SqlDataReader物件

            ExecuteScalar:執行查詢結果集的第一行與第一列結果中的第一行與第一列表示Adapter類別用來填入DataSet與更新資料庫資料指令與資料庫連線

          此類別有4種建構子如下

       

 

#public##       

 

#        #        

#o

##' #SqlDataAdapter();       

 

1 SqlDataAdapter(#SqlCommandselectCommand);selectCommand);selectCommand);selectCommand);selectCommand);selectCommand);

       

#public SqlDataAdapter(string #selectCommandText, SqlConnectionSqlConnection#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.如果您聽不到任何人,如何修復音頻
3 週前 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