aod.net两大部分
1.一般都会根据主外键进行选择
-
sql.dataread -->每次读取单行,相当于游标
-
datasetBase 重点
1)可以降低访问频率
2)database是断开式连接,不能及时更新
3)sql.dataread 与sql服务器一直连接,所以数据时一直更的
4)只有使用open才真正和数据库建立联系,dataread在于数据库进行完成交互后,还要手动关闭,但是dataAdapter使用fill /update后就不用手动关闭,系统会自动关闭的
5)table的组成部分由行,列,单元格(但是游标只是针对行进行操作的)
6)游标是针对结果集进行操作的
5.重点总结(sql command和sql dataAdapter的区别)
1)对数据库进行单条语句的操作–>使用sql dataCommand
2)dataset 有一个table 的表的集合,相当于数据库集(在本地内中)
3)dataAdapter对本地数据的操作一般是使用如下方式(不能使用SQL语句对本地table集进行操作,SQL只能对服务器中的数据进行操作):
dataset ds;
ds.Tables[“FirstCusts”].Rows[0][0] //对table集合中第一张表FirstCusts的0行0列单元格进行操作
//但是此时的操作只是针对本地数据的,要想同时更新数据库中的数据要使用如下操作
SqlCommandBuilder scb = new SqlCommandBuilder(this.da); // 创建SqlCommandBuilder自动创建动态的增删改函数,然后对本地的表进行检查,
//如果发现有改动的地方,就去更新数据库中相应的地方,Adapter.update有一个跟踪机制RowState
//可以让服务器知道什么行,单元格的数据被更改了,从而降低传递资源的占有
this.da.Update(this.ds.Tables[“FirstCusts”]); //根据本地的表对数据库进行更新
- sql dataAdapter 是离线访问,sql command 是在线访问
5)adapter中查询(select) 对应 fill函数,其他操作(增删改)对应Update
6)sql dataAdapter 虽然可以自动断开,但是也要讲 sql connection 进行 close() 和 dispose( )
7)使用sql command 查询时只能使用游标一行行的将数据读出来,但是sql dataAdapter可以进行跳跃式的读取数据(因为整个table已经在本机的内存里)
8)在执行对数据的"存储过程"操作时,最好使用sql command,不推荐使用dataAdapter(因为要构造增删改比较麻烦)
9)sql执行过程时,excuScalar–>对于insert返回的是null
10)ExcuScalar–>返回单值(仅限查询的时候),其他操作返回null–>不能用来判断是否执行成功
11)只能使用存储过程的异常来判断过程是否正常执行
12)存储过程一般用于复杂的业务,一般不用于简单的查询
13)存储过程的最后一行为查询的话,可以被返回,ExecuteScalar返回存储过程最后一行的结果
14)SQL–dataAdapter中极少使用存储过程
15)更新先更新外键表,在更新主键表
16)sql command和sql dataAdapter都可以带参执行
17)ExcuteScalar一般用于查询,返回查询的结果(table)
18)ExcuteNonquery 用于除查询以外的T-SQL过程,值返回收影响的行数
- sql.Reader—>相当于游标,逐行读取 ,sql.Adapter—>用于值查询的场合比较方便
20)XML 区分大小写
- 使用dataset的方法可以对本地dataset中的table集进行增删改查:
dataset.table[].rows.removeAt //删除
dataset.table[].rows.clear// 清除
dataset.table[].rows.add//添加
dataset.table[].rows.insertAt// 插入
23
this.datagridview.Update(this.studentDataSet); //更新当前datagridview数据,而不是服务器上的数据
6.C#中使用ADO进行数据库操作
-
cmd.command.Text=“select count(*) from”+this.txtTableName.Text.Trim( ) // 从文本框中读取文字时,最好Trim一下,将前后多余的空格去掉!
-
DatagridView比 listView更加适合数据展示和绑定
3)ds.table[…] Rows.RemoveAt[0] // 只是删除中间环节的dataTable中的数据,而不是服务器中的表
- 服务器—> dataTable(中间环节,在内存中)—>datagridView
5)menu strip —>右键菜单
6)计算列没有列名,要使用AS ,取列名才能显示
- select case when country=‘usa’ then 1 else 0 //可写在一行
8)一个dataset中可以创建多个表,相互独立的
9)datagridview 中的readonly -->设置为false 就可以修改表
10)如果要将dataset中的table更改之后,再更新服务器的话,datatable要与服务器的原表的结构保持一致
11)一般不会在表中修改数据,一般只是用来展示
12)一般是对daragrdview的某Row双击后,然后弹出新界面,再来对数据进行修改
13)sql connection是假连接,fill / dataread /dataset 才是真正的连接到数据库
14)可空的数据类型:
int? i2=0
int? i3=null // int可以为null
- 当引用的嵌套类的中的类时,必须使用全名空间,例如:
classA
{
class a
}
//则引用时要写 classA.classa
using(sqlconnection=…) //与数据库建立的连接和cmd都要重用! 数据库的连接时非常耗时的,所以不要每次操作都创建连接!!
{
conn.open( )
}
-
cmd.parameters.Add—>之前要调用clear( )
-
cmbobox的item的显示内容和绑定对象是不一样的
-
.NET程序都要配置文件 //使用system.configtion 引入才能读配置文件
19)streamRead每次一行,适合于大数据的文件,file.ReadAlllines 先把文件一次性读入内存
20)每次于数据库交互的时候,都要暂时性的建立一次连接,然后断开
21)dataread相当于一个游标,每次从数据库中读取一行数据(不占内存),但是sql断开以后,dataread也可以断开,优点是不占内存(在线数据集)
21)一个数据库能承载的用户是有限的,所有要及时断开
22)Adapter.Getdata–>直接将数据从服务器取出并生成一个table
Adapter.fill--->必须新建一个datatable,然后将取出的数据填充进去
23)dataset有自动生成的insert,delete方法,很方便:
24)当进行批量处理的时候应该统一先open,然后处理完所有操作后再一次性close,例如
Adapter.connetion.open( )
for( )
{
批量处理…
}
Adapter.connetion.close( ) //在一个连接中进行批量处理,操作速度快,否则每次都要执行例如insert语句时都要重复open和close---->效率很低!!
7.ADO中的事物
14)一个数据库连接上可以开启多个事物
15)commit将数据提交到数据库