《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