ADO.NET

来源:互联网 发布:华为财务共享中心 知乎 编辑:程序博客网 时间:2024/05/29 13:19

ADO.NET

介绍

ADO.NET是是一个COM组件库,用于在以往的Microsoft技术中访问数据。也是就是说通过ADO.NET技术可以访问数据库中的数据。(所以对我们来说了解它是十分有必要的)

1.对象模型构成

ADO.NET由两部分组成:数据提供程序(Provider)和数据集(DataSet)
  • Provider:它能和数据库保持链接,并且执行SQL命令,操作数据集
  • DataSet:能在断开数据库的情况下操作数据(核心)
  • Dataset是由多张DataTable(即我们通常所说的表)构成的
  • Provider里面有四个非常重要的对象,分别是:DataReader、DataAdapter、Commond、Connection。

2.ADO.NET 对象模型

*Connection

我们可以把数据库看作水源,里面存储了大量的水(数据),Connection好比伸入水中的进水龙头,保持了和水的接触,只有它和水接触了,其他的对象才能得到水。

*Command

Command 就像抽水机,为抽水提供动力和执行方法,通过“水龙头”,然后把水返回给“水管”。简单地说,就是我们写好了SQL语句,让command对象去执行。

*DataAdapter

DataAdapter像输水管,担任着水的传输任务,并起着桥梁的作用,通过发动机把水从水源送到水库(dataset)里进行保存

*DataReader

DataReader也是一种水管,起着同样的作用。但是,它不是把水输送到水库里面,而是单向地直接把水送到需要用水的用户那里,所以要比在水库中转一下要更快一点。

*DataSet

DataSet为”大水库”,把抽上来的水在按一定的关系的池子里进行存放,即使撤掉”抽水装置”,也能保持水的存在(ADO.NET的核心)。也可以理解为数据库的表在内存中映射的缓存。

*DataTable

DataTable是水库中,每个独立的水池子,分别存放不同类别的水,他们一起组成了”水库”。

3.Connection 连接关闭数据库

*访问数据库需要用到数据库连接类,在C#中可以通过Connect类来实现

*步骤

  • 在网上下载相应的dll 驱动程序(类库),放到本地文件夹的某个地方
    在你的工程项目中,单击”引用”添加引用

    这里写图片描述

    添加之后,右边就可以看到新增的引用类库,其次就是引用命名空间,我这里用的是MySQL,其他的数据库也是类似的。

这里写图片描述

  • 将连接方法声明至字符串中
  • 创建Connection对象
  • 调用方法,打开数据库连接
string conStr="Server=localhost;user=root;pwd=123456;database=XX";MySqlConnection myCon=new MySqlConnection(conStr);myCon.open();

*为了节省系统资源,提高性能,最好使用完数据库后就要关闭连接,下面介绍几种关闭连接的方式

=> 可以通过using语句,确保对象在退出时立即被释放,从而达到关闭数据库的作用

using(myCon){    myCon.Open();     //使用完之后会自动关闭连接}

=> 使用try…catch…finally

try{    myCon.Open();    .....  //代码}catch{    .... //异常处理}finally{    myCon.Close();}

4.Command操作数据

常用属性:

CommandText: 要下达到数据源的命令
CommandTimeOut: 出错时等待时间

常用方法:

ExecuteNonQuery():不返回任何值,一般应用于insert,update,delete操作

下面进行一个插入操作,向clerk表插入一条记录(必须先添加引用,这样才能使用命名空间)

 static void Main(string[] args)        {            string conStr = "Server=localhost;user=root;pwd=123456;database=company"; //创建数据库连接字符串            MySqlConnection myCon = new MySqlConnection(conStr);            try {                myCon.Open();                string InsertSql = "inser into clerk values(10088,'Lucy',21,'F','warehouse',sysdate())";                MySqlCommand myCom = new MySqlCommand(InsertSql, myCon);                myCom.ExecuteNonQuery(); //执行操作                Console.WriteLine("数据库插入操作完成");                Console.Read();            }            catch(Exception ex) {                Console.WriteLine(ex.Message.ToString());                Console.Read();            }            finally {                myCon.Close();            }        }

执行完之后就可以看到数据库表中多了一条记录o(∩_∩)o

这里写图片描述
ExecuteScalar() :返回一个值,一般用于只返回一个值的语句。如求数据统计的count语句,求最大数、求最小数等等。

 static void Main(string[] args)        {            string conStr = "Server=localhost;user=root;pwd=123456;database=company"; //创建数据库连接字符串            MySqlConnection myCon = new MySqlConnection(conStr);            try {                myCon.Open();                string maxAge = "select max(age) from clerk";                MySqlCommand myCom = new MySqlCommand(maxAge, myCon);                int max=(int)myCom.ExecuteScalar(); //执行操作                Console.WriteLine("最大的年龄是:"+max);                Console.Read();            }            catch(Exception ex) {                Console.WriteLine(ex.Message.ToString());                Console.Read();            }            finally {                myCon.Close();            }        }

结果如下:
这里写图片描述

5.DataReader读取数据

*DataReader对象提供了用顺序的、只读的方式读取Command对象获得的数据结果集。正是因为DataReader以顺序的方式连续地读取数据,所以它会以独占的方式打开数据库连接

*由于DataReader指执行读操作,并且每次只在内存缓冲区里存储结果集中的一条数据,所以使用它的效率比较高。若要查询大量数据,同时不需随机访问和修改数据,它是优先选择。

常用属性:

FieldCount: 表示记录中有多少字段
HasRows: 用于表示DataReader是否包含数据
IsClosed :表示DataReader是否关闭

常用方法:

Close(): 将DataReader对象关闭。
GetDataTypeName(): 获取字段数据形态。
GetName(): 获取指定字段的名称。
GetOrdinal(): 获取指定字段名称在记录中的顺序
GetValue(): 获取字段的值
GetValues(): 获取字段的所有值
Read(): 读取下一条数据
++访问DataReader对象时,使用索引要比使用字段名称访问速度要快

static void Main(string[] args)        {            string conStr = "Server=localhost;user=root;pwd=123456;database=company"; //创建数据库连接字符串            MySqlConnection myCon = new MySqlConnection(conStr);            try {                myCon.Open();                Console.WriteLine("数据库已经打开");                string Sql = "select * from clerk";                MySqlCommand sqlCom = new MySqlCommand(Sql, myCon);                //声明                MySqlDataReader dr;                dr = sqlCom.ExecuteReader();                Console.WriteLine("字段个数有:" + dr.FieldCount);                for (int i = 0; i < dr.FieldCount; i++) {                    Console.Write(dr.GetName(i) + "\t"); //输出表的字段名                }                Console.WriteLine();                while (dr.Read()) {                    for (int i = 0; i < dr.FieldCount; i++) {                        Console.Write(dr.GetValue(i) +"\t");                    }                    Console.WriteLine();                }                Console.Read();            }            catch(Exception ex) {                Console.WriteLine(ex.Message.ToString());                Console.Read();            }            finally {                myCon.Close();            }        }

这里写图片描述

6.DataSet

*Dataset对象由一组DataTable对象组成,这些对象与DataRelation对象相互关联,DataTable对象又包含Rows和Columns。

7.DataAdapter

*DataAdapter对象是DataSet和数据源之间的桥梁,可以建立并初始化数据表(DataTable),对数据源执行sql命令,与DataSet对象结合提供DataSet对象存取数据,可视为DataSet对象的核心操作。

 static void Main(string[] args)        {            string conStr = "Server=localhost;user=root;pwd=123456;database=company"; //创建数据库连接字符串            MySqlConnection myCon = new MySqlConnection(conStr);            try {                myCon.Open();                string sql = "select * from clerk";                MySqlDataAdapter Adapter = new MySqlDataAdapter(sql,myCon);  //两个参数,一个是sql语句,一个是连接                DataSet myds = new DataSet();  //创建DataSet对象               // Console.WriteLine(myds.Tables[0]); //没有填充之前DataSet里面是没有表的                Adapter.Fill(myds, "clerk");  //两个参数,把表“clerk”向dataset里填充                Console.WriteLine("填充成功");                Console.WriteLine(myds.Tables[0]);// 控制台将会输出第一张表                outValues(myds); //调用函数输出表的内容                Console.Read();            }            catch(Exception ex) {                Console.WriteLine(ex.Message.ToString());                Console.Read();            }            finally {                myCon.Close();            }        }
 public static void outValues(DataSet ds)        {            foreach (DataTable dt in ds.Tables) {                Console.WriteLine("表名:" + dt.TableName);                //遍历行                foreach (DataRow row in dt.Rows) {                //遍历列                    foreach (DataColumn col in dt.Columns) {                        Console.Write(row[col] + "\t");                    }                    Console.WriteLine();                }            }        }

结果:
这里写图片描述

*DataAdapter可用于执行数据库的命令操作,含有四个不同的操作命令:

(1)SelectCommand: 选取数据源中的数据
(2)InsertCommand: 用于向数据源插入一条数据
(3)UpdateCommand: 用于更新数据源中的数据
(4)DeleteCommand: 用于删除数据源中的记录

UpdateCommand 进行更新

  static void Main(string[] args)        {            string conStr = "Server=localhost;user=root;pwd=123456;database=company"; //创建数据库连接字符串            MySqlConnection myCon = new MySqlConnection(conStr);            try {                myCon.Open();                string sql = "select * from clerk";                string updateSql="update clerk set sex='F' where name='smith'";                MySqlDataAdapter Adapter = new MySqlDataAdapter(sql,myCon);  //两个参数,一个是sql语句,一个是连接                DataSet myds = new DataSet();  //创建DataSet对象                Adapter.UpdateCommand=new MySqlCommand(updateSql,myCon);                Adapter.Fill(myds,"clerk");                    Console.WriteLine("更新之前的");                    outValues(myds);                  //更新dataset                    DataRow row = myds.Tables[0].Rows[0];                    row["sex"] = "F";                    Adapter.Update(myds, "clerk");                    Console.WriteLine("更新之后的");                    outValues(myds);                    Console.Read();            }            catch(Exception ex) {                Console.WriteLine(ex.Message.ToString());                Console.Read();            }            finally {                myCon.Close();            }        }

这里写图片描述

近期自己在[我要自学网](http://www.51zxw.net/study.asp?vip=9618490)
学习C#入门教程。在这里对知识进行梳理,希望能帮到大家

1 0
原创粉丝点击