您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關什么是ado.net的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
一、介紹
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; } } }
感謝各位的閱讀!關于什么是ado.net就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。