about ADO.net

ADO.NET是.Net FrameWork SDK中用以操作数据库的类库的总称。它提供了一些核心的对象实现对数据库的操作,这些核心对象在前篇博客中已经大致引述了一下,该篇博客主要对主要对象进行说明。

string dataDir = AppDomain.CurrentDomain.BaseDirectory;//获取当前程序路径
            if (dataDir.EndsWith(@"\bin\Debug\")
            || dataDir.EndsWith(@"\bin\Release\"))//判断是在\bin\Debug\或\bin\Release\路径下
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
//获取dataDir的父目录的名称
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }

一、Connection对象

    Connection对象是数据库连接对象,主要负责对数据源的连接,所有Connection对象的基类都是DbConnection类。
    Connection对象有两个重要的属性:
        ConnectionString:存储打开数据库的字符串;
        State:表示Connection的状态,有Closed和Open两种状态。
    Connection对象有两个重要的方法:
        Open方法:用于打开数据库;
        Close方法:用于关闭数据库;

 using(SqlConnection conn=new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=true;User Instance=true"))
            {
                conn.Open();
            }

在使用Connection对象连接数据库时我们常在Using语句中定义该对象,在使用完该对象后即关闭和释放对象,减少内存占用。如果不使用Using语句的话应在使用完该对象后调用Close方法关闭数据库,并在随后使用Dispose方法释放对象。

连接到数据库可以用下面的方式:
     (1)如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网中的电脑主机名;
     (2)如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP,我们可以使用公网IP来连接,如果数据库服务器还有互联网域名,那么用互联网域名也是可以的。
     (3)如果要连接的数据库服务器与开发者所使用的机器是同一台机器,那么可以使用以下几种方式之一:”(local)”或者”.”或者”127.0.0.1”。需要注意的是,如果在一台机器上运行着同一种数据库的不同版本,比如说在”xxxxx”这台主机上同时运行着SQL 2000、SQL 2005和SQL Express三种版本,并且它们所使用的Windows服务名分别为”SQL2000”、”SQL2005”和”SQLExpress”,那么我们要连接到SQL 2000这个数据库上所使用的服务器名就应该填写”xxxxx\SQL2000”这种“主机名\实例名”的方式或者“主机IP\实例名”,这种情况在同时安装了Visual Studio 和SQL 的朋友那里很常见,因为SQL Express是针对学生的功能有限的免费版本,这个版本的数据库在安装Visual Studio 时默认是一同安装的。

二、Command对象

    Command对象也称为数据库命令对象,Command对象主要执行对数据库进行增删改查操作的命令。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。
    Command对象常用属性:
        Connection:定义连接对象,如果使用该对象需要与数据库的连接对象绑定否则不能对数据库进行操作;
        Parameters:主要用于存储对数据库进行参数化查询时所需的参数;
        CommandType:用于设置操作命令的类型;
        CommandText:存储对数据库的操作命令语句。

ExecuteScalar ():从数据库检索单个值。该方法主要用于统计操作,针对SQL语句执行的结果是一行或一列的结果集,该方法只返回查询结果集的第一行第一列。

using(SqlConnection conn=new SqlConnection(@"Data Source=.\SQLEXPRESS;
AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=true;User Instance=true"))
            {
                conn.Open();

                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Insert into MyTable1(Name) values('abc')";
                    cmd.ExecuteNonQuery();
                    Console.WriteLine("插入成功");
                }
            }

三、DataReader对象

    DataReader对象是一个读取行的只读流的方式,它只能对数据库进行读取不能进行更改。
    DataReader在使用时不能直接进行实例化,必须借助与之相关的Command对象来创建实例,例如用SqlCommand的实例的ExecuteReader()方法可以创建SqlDataReader实例。因为DataReader对象读取数据时需要与数据库保持连接,所以在使用完DataReader对象读取完数据之后应该先调用它的Close()方法关闭,然后才能关闭与之相关Connection对象。
    DataReader对象读取数据的三种方法:
       一种是按查询的时候列的索引用指定的方式来读取列值,无需做相应转换,如GetString(int i)就是读取第i列的值并且转换成String类型的值。第这种方法的优点是指定列后直接将该列的直接读取出来了,无需再转换,缺点是一旦指定的列不能按照指定的方式转换时就会抛出异常,比如数据库里字段的类型是Double类型或者该字段的值为空时按照GetString(i)这种方式读取会抛出异常。

       第二种方式就是按照列索引的方式读取,在读取的时候并不进行值转换,如:reader[5]就是读取第5列的值(这里reader是一个Reader对象的实例),这样得到的值是一个object类型的值,这也很好理解,因为在数据库可能存储各种类型的值,而object是所有类的基类,所以这个方法不会抛出异常。如果要得到它的正确类型,还需要根据数据库里的字段进行进行相应转换。

      最后一种是按照列名的方式去读,并且在读的时候也不进行相应转换,得到的是object类型的值。

   综合前面三种方式各有特点,第一种方式最直接,但是有可能抛出异常,第二种方式比第一种稍微灵活一些,我们可以根据读取到值为空(在.net里用DBNull类来表示,可以表示数据库中任意数据类型的空值),我们就不进行相应的类型转换,避免出现异常。第三种方式按照列的名字来读取数据,也需要按照第二种方式进行一定的转换。就性能来说第一种最高,第二种稍低,第三种最低(这很好理解,假设要在一个旅馆里找人直通过房间号找肯定比通过名字找快),就灵活性来说第三种最灵活,第二种次之,第一种最不灵活(假如在后来编写SQL语句中更改了列的索引,第一种和第二种都可能出现问题)。实际开发中根据实际情况选择合适的方式。

    使用 DataReader 检索数据的步骤:
    1、创建 Command 对象
    2、调用 ExecuteReader() 创建 DataReader 对象
    3、使用 DataReader 的 Read() 方法逐行读取数据
    4、读取某列的数据,(type)dataReader[ ]
    5、关闭 DataReader 对象

     DataAdapter对象常用方法:
             Fill:想Dataset中填充数据;
             Update:将对数据集的操作反应到数据库中。
       注意:DbDataAdapter 具有四个用于从数据源检索数据和更新数据源中数据的属性: SelectCommand 属性返回数据源中的数据; InsertCommand、 UpdateCommand 和 DeleteCommand 属性用于管理数据源中的更改。 调用 DataAdapter 的 Fill 方法之前必须设置 SelectCommand 属性。 在调用 DataAdapter 的 Update 方法之前必须设置 InsertCommand、UpdateCommand 或 DeleteCommand 属性,具体取决于对 DataTable 中的数据做了哪些更改。 例如,如果已添加行,在调用 Update 之前必须设置 InsertCommand。 当 Update 正在处理已插入、已更新或已删除的行时,DataAdapter 将使用相应的 Command 属性来处理该操作。 有关已修改行的当前信息将通过 Parameters 集合传递到 Command 对象。

五、DataSet对象

  DataSet对象也称为数据集对象,DataSet对象用于表示那些储存在内存中的数据,它相当于一个内存中的数据库。它可以包括多个DataTable对象及DataView对象。DataSet主要用于管理存储在内存中的数据以及对数据的断开操作。 由于DataSet对象提供了一个离线的数据源,这样减轻了数据库以及网络的负担,在设计程序的时候可以将DataSet对象作为程序的数据源。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值