ADO.NET

ADO.NET

ADO.net就是提供的一堆类库,这个类库里面有很多专门操作各种数据库的类,他们都是实现统一接口,

所有数据库

 

组成部分

第一部分:数据提供程序,命名空间:System.Data.SqlClient

Connection 连接数据库的通道,Command 命令执行对象

DataReader 数据读取器,DataAdapter 数据适配器

 

第二部分:数据集,命名空间:System.Data

本地化的结果集,就是把数据库查询之后的结果集,取出来存到本地内存中

 

ConnectionStringBuilder:自动化生成连接字符串

连接字符串就是告诉程序,要怎么连接数据库,连接到哪个数据库,用什么登陆方式

 

 

三大对象的理解

Connection 从程序到数据库的一条路

 

Command 从上面的那条路,走到数据库去取出很少的数据的一个人

DataReader 从上面的那条路,开到数据库取相对较多的数据的摩托车

DataAdapter从上面的那条路,,开到数据库取出很多数据的卡车

 

我们根据实际想要取出来的数据量的大小,选择以上三个对象

 

最简单的Ado&Connection

//1.准备好通往数据库的路,但是这条路还有修好

SqlConnection conn = newSqlConnection("server=.;database=HeiMaBlog;uid=sa;pwd=suncoder");

//2.准备一个命令对象

SqlCommand cmd = newSqlCommand();

//2.1 告诉命令对象要做的事情,就是sql语句,可以吧查询分析器的语句原封不动的复制过来

cmd.CommandText = "select getdate()";

//2.2 告诉命令对象,去数据库的路

cmd.Connection =conn;

//3.开通道路

conn.Open();//在命令对象执行命令之前才打开通道

//4.叫命令对象去干活

MessageBox.Show(cmd.ExecuteScalar().ToString());

//5.关闭数据库连接

conn.Close();

MessageBox.Show(conn.State);//打印的Closed,说明conn对象还在,没有被销毁,但是路已经断了

conn.Dispose();//表示当前对象可以被回收,什么时候回收呢

MessageBox.Show(conn.State);//这里还可以访问对象

1.      创建连接通道conn

2.      创建命令对象

3.      指定命令对象要执行的命令

4.      指定命令对象使用的连接通道

5.      打开连接

6.      执行命令

7.      关闭,销毁连接

 

Conn对象多次关闭不会报错,多次打开会报错

 

关于using

//实现了IDisposable接口的对象,可以使用using进行资源管理

//using会在作用于结束的时候自动调用对象的dispose方法

//1.

using (SqlConnection conn = newSqlConnection("server=.;database=。。。。。。。"))

{

    SqlCommand cmd = newSqlCommand();

    cmd.CommandText = "";

    cmd.Connection = conn;

    conn.Open();

    cmd.ExecuteScalar();

    //conn.Close();//关闭的是程序和数据库之间的连接,

    //conn.Dispose();//这个方法内部是调用了close方法的

}

//2.

using (conn = newSqlConnection()){}

//3.

conn = newSqlConnection();

using (conn){}
连接池

池:在电脑内存里的一个键值对集合,键是连接字符串,值是conn对象

ADO.NET是默认启用了连接池的,

在连接字符串里,设置Pooling的值为false,就可以不适用连接池

如果使用相同的连接字符串来创建一个新的Conn对象,那么就会直接从连接池中取出这个对象,不会重新创建,

 

Conn的statchenge事件,这个事件就是可以去到在状态改变的时候,改变之前的状态和改变之后的状态

Conn,state属性,可以取到当前的状态,这个状态是个枚举

Conn.open()

Conn.close()

因为conn的父类实现了IDisposeable接口,所以我们可以使用using来管理资源,using可以再大括号解释的时候,自动调用对象的dispose方法,

Conn的dispose方法默认调用了close方法,就可以不用手动写代码关闭连接

 

Command对象

Command对象,就是执行数据库查询的人

,我们给它一个命令(sql语句),它有三大方法去执行这个语句,并且返回相应的数据

 

三大方法

 

ExecuteScalar()       

这个是返回sql语句查询出来的结果集的第一行第一列的一个object值

ExecuteNonQuery()

执行非查询语句(增,删,改),并且返回受影响行数

 

 

ExecuteReader()

返回一个读取器,这个读取器读取的是服务器内存里的一个结果集数据,我们通过hasRows属性可以知道这个结果集有木有数据,

Read()方法,可以让读取器向前进一行,,并且把这一行的数据装到当前对象里

 

通过datareader[下标],就可以去到当前行的数据,下标从0开始,

 

dr[0] 这个是通过下标查询结果集里面对应下标的列的数据

dr["Name"]查询结果集里面对应列名的列的数据,因为,我们在sql语句中可以给列名取别名,所以这里的列名就不一定和数据库的列名相同

 

一般,我们用上面的方式取值,因为,第二种方式实际上还是先通过名字找到对应的下标,然后再通过下标找到数据,

如果数据量不是很大,随便用哪个

 

Try catch

         捕捉程序运行时的错误,保证在一个功能出错的时候,不会使整个程序崩溃,让其他功能还能继续适用

 

Try Catch并不影响多大效率,情况是在没有报错的情况下,一旦报错,基本上消耗要大10倍

 

Try用法是要用在非常容易出错的地方,出错概率微乎其微的就不用

 

ExecuteScalar

返回查询语句查询到的结果集的第一行第一列的值,由于程序本生不能确定返回值到底是什么类型的,所以,返回的时候object类型,需要我们自己做数据类型转换

 

SqlConnection conn = newSqlConnection("server=.;database=。。。);

SqlCommand cmd =conn.CreateCommand();

cmd.CommandText = "selectcount(id) from Student";

conn.Open();

int res = Convert.ToInt32(cmd.ExecuteScalar());

MessageBox.Show(res);

在一个insert语句执行完毕后,得到刚才新增的主键

 

INSERT INTOdbo.Teacher(Name, Gender, Salary)OUTPUT INSERTED.id VALUES('王五',0,102)

DELETE FROMdbo.Teacher OUTPUT DELETED.id WHERE id=1007

在insert语句的values前面加上“inserted.主键” 这样就可以去到新增之后的主键,

对比普通的insert语句,普通的是显示受影响行数,如果加了output的就是返回主键值

和@@identity类似

 

Deleted 是刚刚删除的数据,如果同时删除的不只一行数据那么会返回多个值

 

如果查询语句返回的是一个空的结果集,ExecuteScalar会返回什么内容?

答案:返回的是一个null

 

 

void test()

{

    return;

    Console.WriteLine("aa");

}

在一个方法里面,任何地方加上return,就可以立刻返回这个方法,后面的代码都不会执行了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值