zoukankan      html  css  js  c++  java
  • C#之ADO.NET基本知识点(01)

    《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
    
    
    
    
    
  • 相关阅读:
    python unittest学习4---跳过测试与预计的失败
    vue element-ui 使用 el-scrollbar监听滚动条滚动事件,处理el-tabs滚动到顶部header吸顶效果
    vue element-ui 复制文本到粘贴板
    VS Code 在HTML中生成随机文本内容
    git 添加多个远程仓库命令
    javascript——常用基础API部分方法、面试题集合
    清明时节,css3如何将网页变成灰色
    ffmpeg合并本地/线上、破解下载m3u8格式视频并转mp4格式命令
    javascript面试题
    javascript以下几种情况转换成布尔类型会得到false
  • 原文地址:https://www.cnblogs.com/baben/p/7271616.html
Copyright © 2011-2022 走看看