《ADO.NET》 1、ADO.NET 是一組類庫。 2、命名空間:System.Data.* 3、ADO.NET 分為:1、數據提供程式 2、數據集 《數據提供程式》1、Connection:用來連接資料庫。 2、Command:用來執行SQL語句。 1、ExecuteNonQuery():執行對 ...
《ADO.NET》
1、ADO.NET 是一組類庫。
2、命名空間:System.Data.*
3、ADO.NET 分為:1、數據提供程式 2、數據集
《數據提供程式》
1、Connection:用來連接資料庫。
2、Command:用來執行SQL語句。
1、ExecuteNonQuery():執行對資料庫的增刪改,返回受影響的行數,適合:insert、delete、update(對於其他語句返回-1)
2、ExecuteScalar():執行查詢,返迴首行首列
3、ExecuteReader():執行查詢,返回DataReader對象
3、DataReader:只讀、只進的結果集,一條一條讀取數據。從資料庫讀取數據。
4、DataAdapter:一個封裝了上面3個對象的對象
《數據集》
DataSet:在記憶體中的臨時資料庫。斷開式數據操作。
與DataSet相關的類:
DataView //視圖類,DataTable中的數據以不同的視角查看
DataRowView //DataView中的行。
DataTable //DataSet中的數據表
DataRow //DataTable中的行
DataColumn //DataTable中的列
DataRealation //DataTable與DataTable的關係
Constraint //DataTable中建立的約束
《兩種連接方式》
1、Connection + Command + DataReader
2、Connection + DataAdapter + DataSet
《連接池》
1、ADO.NET預設啟用了連接池
2、如何清空連接池?SqlConnection.ClearAllPools()、 SqlConnection.ClearPool()
3、ADO.NET連接池使用總結:
1、第一次打開連接會創建一個連接對象
2、當這個連接關閉時(調用Close()方法時)會將當前那個連接對象放入池中
3、下一個連接對象,如果連接字元串與池中現有連接對象的連接字元串完全一致,則會使用池中的現有連接,而不會重新創建一個
4、只有對象調用Close(),的時候才會放入池中,如果一個連接對象一直在使用,則下次再創建一個連接對象發現池中沒有,也會再創建一個新連接對象
5、在池中的連接對象,如果過一段時間沒有被訪問則自動銷毀
6、使用建議:儘量晚打開,儘量早關閉
《語句參數化》
1、防止SQL註入漏洞攻擊
《配置文件》
1、把資料庫連接字元串放在配置文件中
《其他》
1、Transaction:在ADO.NET中使用事務
《代碼例子》
1、《Connection + Command + DataReader》例子
1 /// <summary> 2 /// 《Connection + Command + DataReader》例子 3 /// </summary> 4 public void ConnectionTest() 5 { 6 //資料庫連接字元串 7 var connStr = "Data Source=10.101.22.74,8080;Initial Catalog=DataBaseName;User ID=userid;Password=password"; 8 //sql語句 9 var sql = "select count(*) from department where dname='a2'"; 10 //鏈接資料庫、執行語句 11 using (SqlConnection conn = new SqlConnection(connStr)) 12 { 13 SqlCommand cmd = new SqlCommand(sql, conn); 14 //cmd.CommandType = System.Data.CommandType.StoredProcedure;//存儲過程 15 conn.Open(); 16 //cmd.ExecuteNonQuery(); 17 //cmd.ExecuteScalar(); 18 //cmd.ExecuteReader(); 19 int resultOne = cmd.ExecuteNonQuery();//執行對資料庫的增刪改,返回受影響的行數 20 object resultTwo = cmd.ExecuteScalar();//執行查詢,返迴首行首列 21 SqlDataReader resultThree = cmd.ExecuteReader();//執行查詢,返回DataReader對象 22 while (resultThree.Read()) 23 { 24 resultThree.IsDBNull(0);//進行非空驗證 25 var item = resultThree.GetInt32(0); 26 var item2 = resultThree.GetString(1); 27 } 28 resultThree.Close();//通過執行ExecuteReader()方法獲取輸出參數的時候需要將reader.Close()以後才能獲取 29 resultThree.Dispose(); 30 //2 31 using (SqlDataReader resultFour = cmd.ExecuteReader()) 32 { 33 while (resultThree.Read()) 34 { 35 resultThree.IsDBNull(0);//進行非空驗證 36 var item = resultThree.GetInt32(0); 37 var item2 = resultThree.GetString(1); 38 } 39 } 40 } 41 }
2、《防SQL註入》例子
1 /// <summary> 2 /// 《防SQL註入》例子 3 /// </summary> 4 public void ParameterTest() 5 { 6 string name = Console.ReadLine(); 7 string password = Console.ReadLine(); 8 //資料庫連接字元串 9 var connStr = "Data Source=10.101.22.74,8080;Initial Catalog=DataBaseName;User ID=userid;Password=password"; 10 //sql語句 11 var sqlOne = "select * from T_Users where UserName =" + "qp" + "and Password =" + "123456"; 12 var sqlTwo = "select * from T_Users where UserName =" + "qp" + "and Password =" + "123456 or 1=1"; 13 var sqlThree = "select * from T_Users where UserName = @name and Password = @password"; 14 //鏈接資料庫、執行語句 15 using (SqlConnection conn = new SqlConnection(connStr)) 16 { 17 SqlCommand cmd = new SqlCommand(sqlThree, conn); 18 cmd.Parameters.Add(new SqlParameter("@name", name)); 19 cmd.Parameters.Add(new SqlParameter("@password", password)); 20 conn.Open(); 21 //...... 22 } 23 }
3、《Connection + DataAdapter + DataSet》例子
1 /// <summary> 2 /// 《Connection + DataAdapter + DataSet》例子 3 /// </summary> 4 public void DataSetTest() 5 { 6 //資料庫連接字元串 7 var connStr = "Data Source=10.101.22.74,8080;Initial Catalog=DataBaseName;User ID=userid;Password=password"; 8 //sql語句 9 var sql = "select count(*) from department where dname='a2'"; 10 //1 11 using (SqlConnection conn = new SqlConnection(connStr)) 12 { 13 SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); 14 DataSet ds = new DataSet(); 15 conn.Open(); 16 adapter.Fill(ds);//本句才真正在執行sql語句,並將數據放到ds中 17 DataTable result = ds.Tables[0]; 18 } 19 //2 20 using (SqlConnection conn = new SqlConnection(connStr)) 21 { 22 DataSet ds = new DataSet(); 23 SqlCommand cmd = new SqlCommand(sql, conn); 24 conn.Open(); 25 DataTable dt = new DataTable(); 26 using (SqlDataReader reader = cmd.ExecuteReader()) 27 { 28 dt.Load(reader); 29 } 30 } 31 }
4、other