什麼是ado.net以及其簡單實現詳解

來源:互聯網
上載者:User
一、介紹

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;

    建立一個串連如下     

      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等等,可以參考學習下

【相關推薦】

1. ASP.NET免費視頻教程

2. C#使用Ado.Net更新和添加資料到Excel表格的方法

3. ADO.NET 讀取EXCEL的實現代碼((c#))

4. ADO.NET調用預存程序

5. ado.net 串連vs 資料庫代碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.