C#从入门到精通之数据访问技术

本文介绍 ADO.NET 的核心组件,包括 Connection 对象用于连接数据库,Command 对象用于执行 SQL 语句,DataReader 对象用于读取数据,DataAdapter 对象作为数据源与 DataSet 之间的桥梁,以及 DataSet 对象作为内存中的小型数据库。
1.ADO.NET是一组向.NET程序员公开数据访问服务的类。
  1.1.ADO.NET支持两种访问数据的模型:无连接模型和连接模型

    无连接模型将数据下载到客户机器上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据; 连接模型依赖于逐记录的访问,这种访问要求打开并保持与数据源的连接

2.连接数据库:Connection对象
Connection对象是一个连接对象,主要功能是建立与物理数据库的连接,
   其中主要包括4种访问数据库的对象类,也可称为出具提供程序
     a.SQLServer数据提供程序,位于System.Data.SqlClient命名空间
     b.ODBC 数据提供程序,位于System.Data.Odbc命名空间
     c.OLEDB 数据提供程序,位于System.Data.OleDb命名空间

     d.Oracle 数据提供程序,位于System.Data.OracleClient命名空间

3.执行SQL语句:Command对象
3.1 Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句,
3.2 Command对象主要有以下几种方式:
    a.SqlCommand:用于向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名空间。
    b.OleDbcommand:用于向使用OLEDB公开的数据库发送SQL语句,位于System.Data.OleDb命名空间。
    c.OdbcCommand:用于向ODBC公开的数据库发送SQL语句,位于System.Data.Odbc命名空间。
    d.OracleCommand:用于向Oracle数据库发送SQl语句,位于System.Dsts.OracleClient
3.3设置数据源类型
Command对象有3个重要的属性,分别是Connection属性、CommandText属性,CommandType属性
Connection属性用于设置SqlCommand使用的SqlConnection.
CommandText属性用于设置要对数据源执行的SQL语句或存储过程。
CommandType属性用于设置要对数据源执行的SQL语句或存储过程
CommandType属性用于指定CommandText的类型,CommandType属性的值是CommandType枚举值:
               StoredProcedure:存储过程的名字。TableDirect:表的名称。Text:SQL文本命令
3.4执行SQL语句
3.4.1 ExecuteNonQuery方法:执行SQL语句,并返回受影响的行数,
                           在使用SqlCommand向数据库发送增、删、改命令时,通常使用ExecuteNonQuery方法执行发送的SQL语句
注:如果想要执行存储过程,应将CommandType属性设置为StoreProcedure,将CommandText属性设置为存储过程的名称。
3.4.2 ExecuteReader方法:执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例。
3.4.3 ExecuteScalar方法:执行SQL语句,返回结果集中的第一行的第一列的值
       ExecuteScalar方法通常与聚合函数一起使用,
     常用的聚合函数: AVG(expr)  求列平均值    count(expr)/count(*) 统计列数   MAX(expr) 求列中最大值

                      MIN(expr) 求列中最小值     SUM(expr) 列值求和   

//连接SqlServer数据库通过SQL查询数据示例代码  
try
            {
                string ConStr = "server=.;database=TGTest;uid=sa;pwd=Sa123";
                SqlConnection conn = new SqlConnection(ConStr);
                conn.Open();   //打开数据库连接
                if (conn.State == ConnectionState.Open)
                {
                    Console.WriteLine("数据库连接已打开");
                    Console.ReadLine();
                    SqlCommand cmd = new SqlCommand();   //创建一个SqlCommand对象
                    cmd.Connection = conn;  //设置Connection属性,指定其使用conn连接数据库
                    cmd.CommandText = "select * from dbo.Tab_User";  //设置CommandText属性,设置其执行的SQL语句
                    cmd.CommandType = CommandType.Text;  //设置CommandType属性为Text,使其只执行SQL语句文本形式
                    //int i = Convert.ToInt32(cmd.ExecuteScalar());  //使用ExecuteScalar方法返回查询结果集中第一行第一列的值
                    //Console.WriteLine(i);
                    //Console.ReadLine();

                    SqlDataReader sdr = cmd.ExecuteReader();    //使用ExecuteReader方法实例化一个SqlDataReader对象。
                    //while (sdr.Read())   //调用while语句,读取SqlDataReader
                    //{
                    //    Console.WriteLine(sdr[1]);
                    //    Console.ReadLine();
                    //}

                    if (sdr.HasRows)  //使用HasRows属性判断结果中是否有数据
                    {
                        Console.WriteLine("查询存在数据");
                        Console.ReadLine();
                    }

                    // conn.Dispose();   //释放连接
                    conn.Close();  //关闭数据库连接
                    if (conn.State == ConnectionState.Closed)
                    {
                        Console.WriteLine("数据库连接已关闭");
                        Console.ReadLine();
                    }
                }
            }
            catch(Exception e)
            {
                Console.WriteLine("数据库连接异常"+e.Message);
                Console.ReadLine();
            }
           

4.读取数据:DataReader对象
4.1 DataReader对象概述:DataReader对象是数据读取器对象,提供只读向前的游标,如果应用程序需要每次从数据库中取出最新的数据,
                或者只是需要快速读取数据,并不需要修改数据,那么就可以使用DataReader对象进行读取。
不同的数据库连接对应不同的DataReader类型。
a.在System.Data.SqlClient命名空间下,可以调用SqlDataReader类
b.在System.Data.OleDb命名空间下,可以调用OleDbDataReader类
c.在System.Data.Odbc命名空间下,可以调用OdbcDataReader类
d.在System.Data.Oracle命名空间下,可以调用OracleDataReader类
4.2 判断查询结果中是否有值
通过SqlDataReader对象的HasRows属性获取一个值,该指示SqlDataReader是否包含一行或多行 包含则为true 反之为false,即判断查询结果中是否有值
4.3读取数据:通过ExecuteReader方法,根据SQL语句创建一个SqlDataReader对象后,再调用SqlDataReader对象的Read方法读取数据

5 数据适配器:DataAdapter对象
5.1 DataAdapter对象概述:是一个数据适配器对象,是DataSet与数据源之间的桥梁,
   5.1.1 DataAdapter对象提供了4个属性,用于实现与数据源之间的互通
      1.SelectCommand属性:向数据库发送查询SQL语句
      2.DeleteCommand属性:向数据库发送删除SQL语句
      3.InsertCommand属性:向数据库发送插入SQL语句
      4.UpdateCommand属性:向数据库发送更新SQL语句
   5.1.2  主要的方法
     1.public int Fill(DataSet ds,string str) 
         ds:要用记录和架构填充的DataSet,str用于表映射的源表的名称,返回成功添加或刷新的行数
注意:在DataTable对象上可以多次使用Fill方法。如果主键存在,则传入行会与已有的行合并,如果主键不存在,则会追加到dataTable中
  2.public int Update(DataTable dt)
      dt:用于更新数据源的DataTable。返回DataSet中成功更新的行数
5.1.3 填充DataSet数据集
  通过DataAdapter对象的Fill方法填充DataSet数据集,Fill方法使用Select语句从数据源中检索数据。
  与select命令关联的Connection对象必须有效,但不需要将其打开。

6.数据集:DataSet对象
6.1概述:DataSet对象就像存放于内存中的一个小型数据库
6.2合并DataSet内容(注意当DataSet对象为null时,无法进行合并)
   使用DataSet的Merge方法将DataSet、DataTable、DataRow数组的内容并入现有的DataSet中、
   public voidMerge(DataSet ds,bool bl,MissingSchemaAction msa)
   ds:需要合并的DataSet ,bl:是否保留当前DataSet中的更改,保留则为true;否则为false
   msa:MissingSchemaAction枚举值之一,枚举值说明如下:
   1.Add 添加必须的列以完成架构
   2.AddWithKey:添加必须的列以完成架构,
   用户可以在每个DataTable上显示设置主键的约束,这将确保对现有记录匹配的传入记录进行追加
   3.Error: 如果缺少指定的列映射,则生成InvalidOperationException
   4.Ignore:忽略额外列
6.3复制DataSet内容
 Copy方法会创建包含架构和数据的DataSet的原样副本
 
   
   
   









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiegenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值