• ADO.net(内置类区别)随记


    Ado.net使用流程

    SqlConnection->open->SqlCommand(sqlstring,conn)->(ExcuteNonQuery ExecuteScalarExecuteReader )->close 
    SqlConnection->open->SqlDataAdapter(sqlstring,conn)->Fill

    1 ExcuteNonQuery 

        由于ExcuteNonQuery()执行命令对象的SQL语句,返回一个int类型的变量,返回数据库操作之后影响的行数,故用于完成 insert、delete、update操作;

    2 ExecuteScalar

        由于ExecuteScalar()返回int型变量(查询的首行首列),故用于聚合函数(count,max,min,agv,sum);

    3 ExecuteReader 数据读取器

       ExecuteReader()尽可能快的对数据库进行查询并得到结果,用于实现只进只读的高效数据查询,返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾;

       使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:

    一种是基于序号的查找

    一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号

    SqlDataReader sdr = cmd.ExecuteReader();
                    //下移游标,读取一行,如果没有数据了则返回false
                    while (sdr.Read())
                    {
                        // 给定列名称的情况下,获取指定列的以本机格式表示的值。
                        Console.WriteLine("编号:" + sdr["Id"] + ",车名:" + sdr["Title"] + ",速度:" + sdr["Speed"]);
                    }

    4  SqlDataAdapter 

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    DataSet ds = new DataSet();
    try
    {
    connection.Open();
    SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
    command.Fill(ds, "ds");
    }
    catch (Exception ex)
    {
    return null;
    }
    return ds;
    }

    SqlDataReader与SqlDataAdapter+DataSet的区别

      1) SqlDataReader //基于连接,只读访问适合数据量较小。(连接模式)

            SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点 (断开模式)

      2) SqlDataAdapter 读取数据后将数据集放入DataSet ,DataSet 的数据存在本地客服机内存。

        3) SqlDataReader返回的是一个数据读写器,只能一条条的读,操作起来不灵活,一般在只读的时候才用到。

               SqlDataAdapter返回的是数据集或者表,可以对其中的数据作任意操作

      4) 写法上不同:

        SqlDatReader执行前须先打开数据库,然后须生成一个command对象。再由command.ExecuteReader()方法赋值。完成后须手动关闭联接。

      SqlConnection connection = new SqlConnection(connectionString);
                SqlCommand cmd = new SqlCommand(strSQL, connection);
                try
                {
                    connection.Open();
                    SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    return myReader;
                }
                catch (System.Data.SqlClient.SqlException e)
                {
                    throw e;
                } 

          SqlDataAdapter 执行时,自动打数据库,且不用Command的ExecuteReader方法进行赋值,完成后自动断开联接。

       SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);
    
               DataSet ds = new DataSet();
    
               adptr.Fill(ds, "OK");
  • 相关阅读:
    ETL工具主流产品
    深入了解当前ETL中用到的一些基本技术
    用C#实现通用守护进程
    80端口被system占用的问题
    Python Web 性能和压力测试 multi-mechanize
    [python]用profile协助程序性能优化
    python代码优化技巧
    转:Java学习路线图
    SecureCRT 颜色
    深度学习(Deep Learning)算法简介
  • 原文地址:https://www.cnblogs.com/terryK/p/11678754.html
Copyright © 2020-2023  润新知