一、介紹
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(#SqlCommand# selectCommand);selectCommand);selectCommand);selectCommand);selectCommand);selectCommand);
卷#public SqlDataAdapter(string #selectCommandText, SqlConnection# 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以及其簡單實作詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!