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#入门教程。在这里对知识进行梳理,希望能帮到大家
- ADO 与ADO.NET
- ADO 与ADO.NET
- ADO和ADO.NET
- ADO、ADO.net、DAO
- ADO ADO.NET区别
- ADO与ADO.NET
- ADO 与ADO.NET
- ADO/ADO.NET
- ADO与ADO.Net
- ADO,ADO.NET
- ado.net
- ADO.NET
- ado.net
- ADO.NET
- ADO.NET
- ado.net
- ADO.NET
- ADO.NET
- Day 28:Fail to get up
- Docker Common Commands
- 计算广告方式
- POJ 1379 Run away & POJ 2420 A star not a Tree [模拟退火] [爬山算法]
- [LeetCode]409. Longest Palindrome
- ADO.NET
- 欢迎使用CSDN-markdown编辑器
- linux 下ftp命令使用
- lua第一个运行实例
- 安装win10 以及 office2016遇到的问题
- 数据结构学习笔记--队列
- Gym 100712D Alternating Strings 动态规划
- ViewPagerIndicator的简单实用
- poj 3252 Round Numbers(数位dp)