C# Ado.net
ADO.NET
ADO.NET是.NET數據庫的訪問架構,ADO.NET是數據庫應用程序和數據源之間的溝通的橋樑,提供一個面向對象的數據訪問架構,用來開發數據庫應用程序。提供對象,對象封裝了操作數據庫的方法
組成:
-
.Net Framework數據提供程序
-
數據集 DataSet
ADO.NET結構
五大類庫:
Connection 用於建立與數據庫的鏈接
Command 用於執行SQL語句 三個常用方法:
ExecuteNonQuery :用於增刪改,返回受影響的行數
ExecuteReader:執行查詢,返回一個SqlDataReader對象
ExecuteScalar:執行查詢,并返回首行首列
DataReader 用於讀取數據
DataAdapter 用於填充吧數據填充到DataSet
DataSet 數據集 ,用於程序中
程序訪問數據庫方法步驟
①創建一個到數據庫的鏈接--- >②打開數據庫鏈接--- > ③創建ADO記錄集--- > ④從記錄中提取需要的數據--- >⑤關閉記錄集--- >⑥關閉鏈接
使用ADO.NET需要在程序中引用System.Data.SqlClient,其中包含了對Sql Server進行操作的數據訪問類
- SqlConnection 鏈接數據庫
- SqlCommand 數據庫命名對象
- SqlCommandBuilder 生成SQL命令
- SqlDataReader 數據讀取器
- SqlDataAdapter 數據適配器 填充DataSet
- SqlParameter 為存儲過程定義參數
- SqlTransaction 數據庫事務
class Program { static void Main(string[] args) { //數據庫連接字符串 string sql = "server =;database=TEST; user =; pwd=;"; SqlConnection conn = new SqlConnection(sql); //創建連接實例化對象,連接數據源 SqlCommand cmd = conn.CreateCommand();//數據庫操作類 cmd.CommandText = "select *from SQL_T go delete from SQL_T where 姓名='Tom'"; //編寫數據庫語句 conn.Open(); //打開數據庫連接,操作數據庫數據 //DataReader數據讀取器,ExcuteReader 獲得數據 SqlDataReader dr = cmd.ExecuteReader();// int count = 0; if(dr.HasRows) { while(dr.Read()) { count++; string id = dr["ID"].ToString(); string name = dr["姓名"].ToString(); string classname = dr["班級"].ToString(); string score = dr["分數"].ToString(); Console.WriteLine(id + "|" + name+"|"+classname+"|"+score); } } Console.WriteLine("一共有"+ count + "行數據"); //刪除 cmd.CommandText = "delete from SQL_T where 姓名='Tom';"; int a = cmd.ExecuteNonQuery(); //ExecuteNonQuery返回受影響的行數 if(a>0) { Console.WriteLine("刪除了"+ a +"行"); }else{ Console.WriteLine("刪除失敗"); } conn.Close(); //接受連接有限,使用完關閉連接 Console.ReadLine(); } }
DataAdapter數據適配器 填充DataSet
class DataAdapter { static void Main(string[] args) { DataSet dataSet = new DataSet(); using(sqlConnection conn = new sqlConnection("")) { conn.Open(); SqlCommand command = conn.CreateCommand(); command.CommandText = "select*from SQL_T";//編寫數據庫語句 SqlDataAdapter dataAdapter = new SqlDataAdapter(command);//創建SqlDataAdapter對象 并執行sql dataAdapter.Fill(dataSet);//填充數據 } } } /// <summary> /// 使用SqlCommandBuilder對數據增刪改查 /// </summary> private static void SqlCommandBuilder() { using (sqlConnection conn = new sqlConnection("")) { conn.Open(); SqlCommand command = conn.CreateCommand(); command.CommandText = "select*from SQL_T";//編寫數據庫語句 SqlDataAdapter da = new SqlDataAdapter(command); DataSet ds = new DataSet(); da.Fill(ds); SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da);//作用是將DataSet增加的數據轉化為SQL語句來跟新數據庫 DataRow row = ds.Tables[0].NewRow();//添加行,實例化一個行對象 row[0] = "11"; row[1] = "22"; ds.Tables[0].Rows.Add(row); //添加到表中 ds.Tables[0].Rows[1] = ""; //修改數據 ds.Tables[0].Rows[2].Delete();//刪除數據 da.Update(ds); //將DataSet中表和數據庫進行對比更新 } }
DataReader 和DataAdapter 區別
SqlDataReader :
-
只能讀取數據庫,而且所有操作必須處於連接狀態,但是要對數據庫進行操作時,只能借助SqlCommand類。
-
一次只在內存中讀取一行,減少系統開銷
-
讀取時需通過自身Read()方法循環讀取數據到指定對象
-
需要通過調用自身 Close()方法斷開連接
SqlDataAdapter:
-
建立在SqlCommand對象之上,具有SqlCommand類的一切功能,能夠將數據填充到DataSet對象中,而且不需要再連接到數據庫,可以直接從DataSet或DataTable中獲取數據
-
可通過Fill()方法一次性填充數據到DataSet
-
讀取完數據庫后自動斷開連接
DataSet DataTable DataRow
DataSet DataSet是不依賴於數據庫的獨立數據集合,即關閉數據庫依然可以使用,DataSet裡面可以存儲多個表(DataTable)
DataTable 表示內存中數據的一個表,存儲在內存中的表,在持久化(dataAdapter.Update)到數據庫之前,是不會對數據庫產生影響的
DataTable 成員DataRow DataTable是由一個個DataRow組成而成。DataTable.Row[i]即表示其中的第i行
DataRowState 是DataRow中一個很重要的狀態包括(Added添加、Deleted刪除、Detached分離、Modified修改、Unchange未改變)
static void Main(string[] args) { //數據庫連接字符串 string sql = "server =GSDEV018HZ;database=TEST; user =GSB6275; pwd=ygt562356610;"; //查詢 string commandString = "Select*from SQL_T"; //創建SqlDataAdapter對象 并執行sql SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString,sql); //創建數據集dataSet DataSet dataSet = new DataSet(); //將數據添加到數據集中 dataAdapter.Fill(dataSet); //將數據表添加到數據集中 DataTable dataTable = dataSet.Tables("SQL_T"); }