C#之ADO.NET基本知识点(01)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#之ADO.NET基本知识点(01)

C#之ADO.NET基本知识点(01)

 2017/8/2 2:38:54  齐八本  程序员俱乐部  我要评论(0)
  • 摘要:《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():执行查询
  • 标签:.net C# net

《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


 

发表评论
用户名: 匿名