ADO.NET(内涵效率问题)

摘要:
它提供了一个统一的编程接口,以便操作其他数据库(Access、Oracle等)的方式与操作MSSqlServer的方式一致。连接到数据库的三个最重要的语句是:断开连接的数据操作。ADO.NET、ConnectionStringBuilder中的其他公共类//自动生成连接字符串(连接时需要一些基本信息,

ADO.NET

为什么要学习ADO.NET呢?

之前我们所学只能在查询分析器里查看数据,操作数据,我们不能让普通用户去学sql,

所以我们搭建一个界面(Web Winform)让用户方便的操作数据库中的数据

什么是ADO.NET?

ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类用类操作文件一样, System.Data.这组类是用来操作数据库(不光是MSSql Server),它提供了统一的编程接口让操作其它数据库(Access、Oracle等)的方式和操作MSSql Server一致.

  连接数据库最重要的三个语句:

数据提供程序(常用类)

Connection,用来连接数据库

Command,用来执行SQL语句

DataReader只读、只进的结果集,一条一条读取数据(StreamReader、XmlReader微软的类库中这些Reader的使用方式都差不多)

  除了上面三个还有:

DataAdapter,一个封装了上面3个对象的对象。

  接下来一个问题就是我们读取出来的数据存到什么地方呢?

数据集(DataSet),临时数据库。

断开式数据操作

ADO.NET中的其他常见类

ConnectionStringBuilder//自动生成连接字符串(连接的时候需要一些基本的信息,就通过这个给传过去)

Parameter//带参数的SQL语句

Transaction//在ADO.NET中使用事务

与DataSet相关的类:

DataView//视图类,DataTable中的数据以不同的视角查看

DataRowView//DataView中的行。

DataTable //DataSet中的数据表

DataRow//DataTable中的行

DataColumn//DataTable中的列

DataRealation//DataTable与DataTable的关系

Constraint//DataTable中建立的约束

ADO.NET(内涵效率问题)第1张

一、Data Source

ADO.NET(内涵效率问题)第2张

二、理解连接数据库过程

马上就说记不住怎么办?

  上面的代码只是让大家理解,以后没必要写那么多。

ADO.NET(内涵效率问题)第3张

三、连接数据库简化写法

步骤一:声明一个字符串

步骤二:一般数据库用完要关闭并释放其资源。

  再次简化的代码,dispose()没有必要每次这样调,用using默认帮我们调了。

ADO.NET(内涵效率问题)第4张

四、连接数据库最终简化的代码

ADO.NET(内涵效率问题)第5张

五、dispose方法用反编译器查看

ADO.NET(内涵效率问题)第6张

六、连接数据库需要注意的地方

连接对象当中有个事件:con.StateChange通过这个事件每次就能捕获连接状态的改变。下面看下它的具体的用法:

ADO.NET(内涵效率问题)第7张

七、事件con.StateChange

  连接字符串的设置方法:

ADO.NET(内涵效率问题)第8张

八、连接字符串属性的设置方法

  如果没有这个工具,我们怎么生成这个字符串呢?就是用SqlConnectionStringBuilder

具体演示如图所示:

ADO.NET(内涵效率问题)第9张

九、用SqlConnectionStringBuilder写连接字符串属性

能不能自己做一个小的连接字符串的生成工具呢?用这个类非常的容易,一下子就做好了。

ADO.NET(内涵效率问题)第10张

十、连接字符串的生成工具

  建议还是把常规字符串的写法记下来。

  上面我们已经把数据库连上了,还没有对其进行操作.下面我们说说第二个对象Command

  完成连接数据库并且向里面插入一条记录:

  在数据库当中选择一张简单的表,建立winForm界面,点击按钮.插入数据.

ADO.NET(内涵效率问题)第11张

十一、向数据库中插入一列

  尽量晚打开,早关闭。用这个资源的时候,不到万不得以不要打开。在这里有个连接池的问题。后面详细讲解。

ADO.NET(内涵效率问题)第12张

十二、向另一个数据库中插入一条数据

ADO.NET(内涵效率问题)第13张

十三、删除数据库中一条记录

ADO.NET(内涵效率问题)第14张

十四、更新数据库当中的一条数据

  小结:刚才我们对数据库进行了增,删,改,代码几乎一样,只有sql语句不一样。都是创建连接对象,sql语句,创建另一个对象,打开,执行,关闭。

   接下来我们看看查询。

ADO.NET(内涵效率问题)第15张

十五、查询数据库中的数据的代码

ADO.NET(内涵效率问题)第16张

十六、查询数据输出结果过程

  我们可以试着用软件练习一下上面刚讲解的内容,对容易出现错误的地方,我进行了统计。马上总结一下。

  1. 连接字符串的时候出现的问题:写计算机名,具体到自己写的时候,看这。

ADO.NET(内涵效率问题)第17张

十七、查看数据库连接的计算机名

  1. 写数据库名称的地方写成了表名
  2. 由于sql语句写错报的错。

怎么调呢?插入的时候报错

ADO.NET(内涵效率问题)第18张

十八、插入的时候报错这样处理

  在代码中有con.Open();

            Int r=cmd.ExecuteNonQuery();

  按道理来讲应该加上try catch,可能会出现断网等现象。

但是,这里加上没法显示出错误。这里要是加上的话,后面也要抛出来。

   总而言之一般在ado.net中遇到的错误:

  1. 连接字符串问题
  2. Sql语句问题

ADO.NET(内涵效率问题)第19张

十九、ExecuteScalar()方法

  StatementCompleted事件,每条SQL语句执行完毕之后触发。

  多条语句同时执行(用分号隔开),如何获取每条语句所影响的行数?

实际返回值为每条语句所影响的行数的和。

ExecuteScalar()方法除了能执行上面聚合函数的问题,请执行插入一条语句,获取刚刚插入这条语句的返回值编号。

ADO.NET(内涵效率问题)第20张

二十、执行查询语句返回自动编号首界面

ADO.NET(内涵效率问题)第21张

二十一、执行查询语句返回自动编号代码部分

  所以,ExecuteScalar()不光是能执行count(*)聚合函数的问题,任何的返回单条语句都可以使用。

  常用的三个方法:

 ExecuteNonQuery() 执行对数据库的增删改,返回受影响的行数,适合:insert、delete、update(对于其他语句返回-1)

ExecuteScalar()执行查询,返回首行首列

ExecuteReader() 执行查询,返回DataReader对象

  还记得我们上面刚做的查询的例题么?下面通过这张图说明一下原理:

ADO.NET(内涵效率问题)第22张

二十二、DataReader

  下面我们再说说通过DataReader获取列中数据时的问题:

ADO.NET(内涵效率问题)第23张

二十三、通过索引器reader[ ]和使用reader.GetValue

ADO.NET(内涵效率问题)第24张

二十四、通过索引器reader[ ]和使用reader.GetValue代码

  很多的时候我们不想做类型转换了,这个时候怎么办呢?请看下面的办法。

ADO.NET(内涵效率问题)第25张

二十五、通过reader获取强类型的数据

SqlDataReader使用注意的地方

数据库中的类型与C#的不太一样,数据库中的float,得用C#的GetDouble( )来获取。

ADO.NET(内涵效率问题)第26张

二十六、空值的处理判断

ADO.NET(内涵效率问题)第27张

二十七、获取多个结果集的数据

  接下来我们再通过SqlDataReader做个小的案例。

ADO.NET(内涵效率问题)第28张

二十八、登录首界面

查一条小技巧:

ADO.NET(内涵效率问题)第29张

二十九、操作技巧,转换成一行

ADO.NET(内涵效率问题)第30张

三十、登录案例代码

  完成当用户登录失败了提示是用户名错了,还是密码错了。怎么做呢?思考一下。

下面看下Ado.net连接池相关

ADO.NET(内涵效率问题)第31张

三十一、没启用连接池的情况

ADO.NET(内涵效率问题)第32张

三十二、启用连接池的情况

我们发现启用连接池以后的速度相当的快。

下面我们用工具看下,启用,没启用状态下数据库内部做了什么东西。

先告诉大家SQL中有这么一个功能:

ADO.NET(内涵效率问题)第33张

三十三、监视连接池内部的情况

ADO.NET(内涵效率问题)第34张

三十四、这种情况下又打开了一个连接

2.什么情况下才会使用池中的连接对象?

  1>当上一个连接对象调用Close()方法后,才会将连接放入池中。

  2>当再次创建连接对象时,只有当本次创建连接对象所使用的连接字符串与池中现有连接对象的连接字符串完全一致时,才会使用池中的连接对象。

ADO.NET(内涵效率问题)第35张

三十五、池可以通过连接字符串配置

  3.连接池中的连接对象的数量可以通过设置连接字符串来设置。

  4.池中的连接对象的销毁由系统决定。

Ado.net连接池使用总结:

1.第一次打开连接会创建一个连接对象。

2.当这个连接关闭时(调用Close()方法时)会将当前那个连接对象放入池中。

3.下一个连接对象,如果连接字符串与池中现有连接对象的连接字符串完全一致,则会使用池中的现有连接,而不会重新创建一个。

4.只有对象调用Close(),的时候才会放入池中,如果一个连接对象一直在使用,则下次再创建一个连接对象发现池中没有,也会再创建一个新连接对象。

在池中的连接对象,如果过一段时间没有被访问则自动销毁。

什么情况下需要禁用连接池?

一般都不禁用。尤其是asp.net之类的程序,n多个用户频繁访问,但是大多数用户访问时采用的都是同一个连接字符串

但如果某个应用程序有多个客户端,每个客户端访问时采用的都是各自的连接字符串,这时如果采用连接池,虽然每次打开连接的速度会变快,但是由于“池”的问题同时会保存多个打开的连接对象。

另外,需要注意的是在递归的时候尽量不要去访问数据库。

下面我们再看下刚才我们做的登录的案例:

ADO.NET(内涵效率问题)第36张

三十六、SQL注入攻击

怎么解决注入攻击的问题呢?

答案就是我们带参数的SQL语句。

ADO.NET(内涵效率问题)第37张

三十七、带参数的SQL语句

作者近期文章列表:

C#基础教程(完全免费,献给代码爱好者的最好礼物。注:本作者分享自己精心整理的C#基础教程,无任何商业目的。
希望与更多的代码爱好者交流心得,也请高手多多指点!!!)
三层 三层(一)
三层相关案例(及常见的错误)
三层实例(内涵Sql CRUD)
SQL数据库 ADO.net 数据库的应用图解一
数据库的应用详解二
ADO.NET(内涵效率问题)
面向过程,面向对象中高级 面向过程,面向对象的深入理解一
面向过程,面向对象的深入理解二
面向对象的深入理解三
winform基础 Winform基础
winform中常用的控件
面向过程 三种循环的比较
C#中的方法(上)
我们常见的数组
面向对象 思想的转变
C#中超级好用的类
C#中析构函数和命名空间的妙用
C#中超级好用的字符串
C#中如何快速处理字符串
值类型和引用类型及其它
ArrayList和HashTable妙用一
ArrayList和HashTable妙用二
文件管理File类
多态
C#中其它一些问题的小节
GDI+ 这些年我收集的GDI+代码
这些年我收集的GDI+代码2
HTML概述以及CSS 你不能忽视的HTML语言
你不能忽视的HTML语言2精编篇
你不能忽视的HTML语言3
CSS基本相关内容--中秋特别奉献
CSS基本相关内容2
JavaScript基础 JavaScript基础一
jQuery jQuery(内涵: jquery选择器)

免责声明:文章转载自《ADO.NET(内涵效率问题)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux 下查看指定行100,200行的文件C++之迭代器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windows下Oracle 11g的下载与安装

Windows下Oracle的下载与安装  一、Oracle下载 官网地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 百度网盘:链接: https://pan.baidu.com/s/1q2vSPlHk_g1zLSANYPvrow ...

关于字节对齐

在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。 一、内存对齐的原因 大部分...

一文看懂 MySQL 分区和分表,提高表增删改查效率

下载网站:www.SyncNavigator.CN客服QQ1793040---------------------------------------------------------- 关于HKROnline SyncNavigator 注册机价格的问题 HKROnline SyncNavigator 8.4.1 非破解版 注册机 授权激活教程 最...

Vue数据更新但页面没有更新的多种情况

Vue数据更新但页面没有更新的多种情况 1、Vue 无法检测实例被创建时不存在于 data 中的 变量 原因:由于 Vue 会在初始化实例时对 data中的数据执行 getter/setter 转化,所以 变量必须在 data 对象上存在才能让 Vue 将它转换为响应式的。 例如: new Vue({ data:{}, template: '&l...

Teamcenter案例展示

01项目背景 为了满足竞争日益激烈的多元化市场需求,工艺设计周期短、任务重,同时对工艺设计质量及投产周期提出了更高的要求。但目前工艺系统主要侧重于结果管理(文档),制约业务能力的提升: 1)  依靠检查表、标杆库等文件或个人经验分析产品的工艺可行性,缺少有效的工具、方法, 产品设计阶段工艺可行性分析不充分,在NC阶段后提出大量变更; 2) 工艺设计与验证:...

C#中的double类型数据向SQL sqerver 存储与读取问题

1、存储 由于double类型在SQLsever中并没有对应数据,试过对应float、real类型,发现小数位都存在四舍五入的现象,目前我使用的是decimal类型,用此类型时个人觉得小数位数应该比自己的数据中小数位数设置的多一点,不然还是会出现四舍五入。 以下是我的代码,由于业务需求,我的数据库只存储一条数据,一直更新 using (SqlConne...