ADO.NET
向.NET程序员公开数据访问服务的类,用于对Microsoft SQL Server和XML 等数据源进行访问,还提供对OLE DB和XML公开的数据源提供一致访问的方法。
两种访问数据的模型:无连接模型(脱机)和连接模型(联机)。
无连接将数据下载到客户机上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据(如DataSet)。
连接模型则依赖于逐记录的访问,这种访问要求打开并保持数据源的连接。
联机时使用Connection、Command、DataAdapter
脱机时使用Connection、Command、DataAdapter、Dataset
ADO.NET的核心对象
·Connection(连接),用来建立与特定数据源的连接
·Command(命令),用来对数据源执行SQL命令语句或存储过程
·DataReader(数据阅读器),用来从数据源中获取只读、向前的数据流
·DataAdapter(数据适配器),用来在数据源和数据集之间交换数据
·DataSet(数据集),用来处理从数据源读出的数据,表示数据在内存中的缓存
使用Connection对象连接数据库
主要成员:
·ConnectionString属性 连接字符串,用于获取或设置连接到数据库的信息
·Open()方法 使用ConnectionString所指定的属性设置来打开数据库连接
·Close()方法 关闭数据库的连接
·StateChange事件 当连接状态更改时触发该事件
Connection对象的使用步骤:
⑴·引入ADO.NET命名空间
⑵·创建Connection对象,并设置其ConnectionString属性
⑶·打开与数据库的连接
⑷·对数据库进行读写操作
⑸·关闭与数据库的连接
·⑴引入ADO.NET命名空间
SQL Server数据提供程序 System.Data.SqlClient
ODBC数据提供程序 System.Data.Odbc
OLE DB数据提供程序 System.Data.OleDb
Oracle数据提供程序 System.Data.OracleClient
⑵·创建Connection对象,并设置其ConnectionString属性
如果使用SQL Server身份验证,则连接字符串通常为:
Data Source=服务器名;Initial Catalog=数据库名;User ID=账户;Password=密码
如果使用Windows身份验证,则连接字符串通常为:
Data Source=服务器名;Initial Catalog=数据库名;Integrated Security=SSPI或
Data Source=服务器名;Initial Catalog=数据库名;Trusted Connection=yes
服务器名:是指数据库所在的服务器名称,也可以写成IP地址;如果是本地服务器,可以写成“.”“(local)”“127.0.0.l”或“本地机器名称”
·SqlConnection 连接对象名=new SqlConnection();
连接对象名.ConnectionString=连接字符串;
·连接字符串变量=连接字符串;
SqlConnection 连接对象名 =new SqlConnection(连接字符串变量);
例:
SqlConnection conn=new SqlCounnection(); conn.ConnectionString=”Data Source=(local);Initial Catalog=StudentRecord;Integrated Security=SSPI”; 或 strConn=”Data Source=.;Initial Catalog=StudentRecord;Trusted_Connection=yes”; SqlConnection conn=new SqlConnection(strConn);
连接对象名.State :
Broken 与数据源的连接断开
Closed 连接处于关闭状态
Connecting 连接对象正在与数据源连接
Executing 连接对象正在执行命令
Fetching 连接对象正在检索数据
Open 连接处于打开状态
·conn.State==ConnectionState.Open
打开与关闭数据库连接
设置好ConnectionString属性之后
连接对象名.Open();
连接对象名.Close();
连接对象名.Dispose();这种关闭不能再用Open打开
StateChange事件
连接状态更改时发生。该事件的处理程序接收一个StateChangeEventArgs类型的参数
有两个属性:CurrentState:用于获取连接的新状态
OriginalState:用于获取连接的原始状态
使用Command对象执行SQL语句
向数据库发送SQL命令。如果是检索命令,那么从数据库取回的数据,可以放在DataAdapter或DataReader对象中。
Command主要成员:
Connection属性:获取或设置Command对象使用的Connection对象
CommandType属性:StoredProcedure 存储过程的名称
TableDirect:表的名称
Text:SQL文本命令
CommandText属性:获取或设置要对数据库执行SQL命令
ExecuteNonQuery()方法:执行不返回行的SQL命令(Insert、Delete、Update), 并返回受影响的行数。
ExecuteReader()方法:执行Select命令,并返回一个生成的DataReader对象
ExecuteScalar()方法:执行Select命令,并返回查询所得的结果集中第一行的第 一列{单个值},忽略其他列或行,如果结果为空则返回 null引用,通常用于统计记录数、总和、平均数
Command对象使用一般步骤:
·创建Command对象,并设置其Connection属性
·设置CommandType和CommandText属性
·调用响应方法来执行SQL命令
·根据返回结果进行适当处理
创建并使用SqlCommand对象
·第一种
SqlCommand 命令对象名=new SqlCommand();
命令对象名.Connection=连接对象名;
命令对象名.CommandType=CommandType.枚举成员;
命令对象名.CommandText=命令文本;
方法返回值变量=命令对象名.Execute....();
·第二种
SqlCommand 命令对象名=new SqlCommand(命令文本,连接对象名);
命令对象名.CommandType=CommandType.枚举对象;
方法返回值变量=命令对象名.Execute....();
例:
SqlCommand comm=new SqlCommand(“select count(*) from studentInfo”,conn); //conn是之前设置好的SqlConnection对象 int iCount= comm.ExecuteScalar(); MessageBox.Show(“studentInfo表中共有”+iCount.ToString()+”条记录”); 注:ExecuteScalar()通常与聚合函数一起使用
使用DataReader对象读取数据
DataRead读取行的只进流的联机数据访问方式,DataRead数据是由数据库返回的只读、只能向下滚动的流信息,因此很适合应用在只需读取一次的数据。
主要成员:
FieldCount属性:获取当前行中的列数,默认值为-1;如果未放在有效的记录集,
则为0
HasRows属性:获取一个值,用于指示DataReader对象是否包含一行或多行
IsClosed属性:获取一个值,用于指示DataReader对象是否已关闭
RecordsAffected属性:获取执行SQL语句所更改、插入或删除的行数;如果执
行的是Select语句,返回值为-1
Close()方法:关闭DataReader对象,每次用完都应该调用Close方法
GetName(int index)方法:获取指定列的名称;参数i为从0开始的列序号
GetOrdinal(string name)方法:在给定列的名称的情况下获取列序号;参数name 为列名称
GetValue(int i)方法:获取以本机格式表示的指定列的值,该值为object类型;参 数i为从0开始的列序号
NextReault()方法:当读取批处理SQL语句的结果时,使数据读取器前进到下一
个结果集,返回值为布尔型,如果存在多个结果集,则为true
Read()方法:使数据前进到下一个记录;返回值为布尔型,如果还有记录,则true
例:SqlDataReader reader=comm.ExecuteReader(); //SqlConnection对象已设置好并打开,comm是之前设置好的SqlCommand对象 while(reader.Read()) {//读取一行数据}
数据适配器:DataAdapter对象
在DataSet与数据源之间起到桥梁作用。
属性:
SelectCommand:向数据库发送查询SQL语句。
DeleteCommand:向数据库发送删除SQL语句。
InsertCommand:向数据库发送插入SQL语句。
UpdateCommand:向数据库发送更新SQL语句。
主要的方法:
Fill方法:主要用于填充DataSet数据集
public int Fill(DataSet dataSet,string scTable);
dataSet:记录和架构填充的DataSet
srcTable用于表映射和源表的名称
返回值:已在DataSet中成功添加或刷新的行数
Update方法:更新数据库
填充DataSet数据集
SqlConnection conn; conn=new SqlConnection(“server=.;database=db_14;uid=sa;pwd=”); SqlCommand cmd=new SqlCommand(“select *from tb_command”,conn); SqlDataAdapter sda=new SqlDataAdapter(); sda.SelectCommand=cmd; DataSet ds=new DataSet(); sda.Fill(ds,”tb_XX”); dataGridView1.DataSource=ds.Table[0];
更新数据源:
DataTable dt=ds.Tables[“tb_XX”]; sda.FillSchema(dt,SchemaType.Mapped); DataRow dr=dt.Rows.Find(txtNo.Text); dr[“姓名”]=txtName.Text.Trim(); dr[“性别”]=txtSex.Text.Trim(); dr[“年龄”]=txtAge.Text.Trim(); dr[“奖金”]=txtjj.Text.Trim(); SqlCommandBuilder cmdbudider=new SqlCommandBuilder(sda); sda.Update(dt);
数据集:DataSet对象
合并数据集:ds1.Merge(ds,true,MissingSchemaAction.AddWithKey);
复制DataSet:DateSet ds1=ds.Copy();
dataGridView2.DataSource=ds1.Table[0];