Connection 物件
Connection 对象主要是开启程序和数据库之间的连结没有利用连结对象将数据库打开是无法从数据库中取得数据的这个物件在ADONET 的最底层我们可以自己产生这个对象或是由其它的对象自动产生
Command 物件
Command 对象主要可以用来对数据库发出一些指令例如可以对数据库下达查询新增修改删除数据等指令以及呼叫存在数据库中的预存程序等这个对象是架构在Connection 对象上也就是Command 对象是透过连结到数据源
DataAdapter 物件
DataSetCommand 对象主要是在数据源以及DataSet 之间执行数据传输的工作它可以透过Command 对象下达命令后并将取得的数据放入DataSet 对象中这个对象是架构在Command对象上并提供了许多配合DataSet 使用的功能在Beta 版中DataSetCommand 物件会更名为DataAdapter
DataSet 物件
DataSet 这个对象可以视为一个暂存区(Cache)可以把从数据库中所查询到的数据保留起来甚至可以将整个数据库显示出来DataSet 的能力不只是可以储存多个Table 而已还可以透过DataSetCommand 对象取得一些例如主键等的数据表结构并可以记录数据表间的关联DataSet 对象可以说是ADONET 中重量级的对象这个对象架构在DataSetCommand 对象上本身不具备和数据源沟通的能力也就是说我们是将DataSetCommand 对象当做DataSet 对象以及数据源间传输数据的桥梁
DataReader 物件
当我们只需要循序的读取数据而不需要其它操作时可以使用DataReader 对象DataReader对象只是一次一笔向下循序的读取数据源中的数据而且这些数据是只读的并不允许作其它的操作因为DataReader 在读取数据的时候限制了每次只读取一笔而且只能只读所以使用起来不但节省资源而且效率很好使用DataReader 对象除了效率较好之外因为不用把数据全部传回故可以降低网络的负载
ADONET 使用Connection 对象来连接数据库使用Command 或DataAdapter对象来执行SQL语句并将执行的结果返回给DataReader 或 DataAdapter 然后再使用取得的DataReader 或DataAdapter 对象操作数据结果
Connection 对象
建立Connection 对象的代码
OLEDB: OleDbConnection MyConnection=new OleDbConnection();
SQL: SqlConnection MyConnection=new SqlConnection();
◆他们的ConnectionString属性获取或设置连接语句 MyConnectionConnectionString=server=(local);database=pubs;uid=sa;pwd=;
◆DataBase 属性获取当前打开数据库
◆DataSource属性获取打开数据库的连接实例
◆Open 方法打开连接
◆Close 方法关闭连接
Command与DataReader 对象
Command 对象中包含了提交数据库系统的访问信息OleDbCommand 与SqlCommand 对象它们的基本对象和操作方法是相同的在此介绍OleDbCommand的用法SqlCommand的用法类推即可
如 OleDbCommand myComm = new OleDbCommand(strQuerymyConnection);
第一个参数是sql语句或存储过程名第二个参数是前面的Connection 对象的实例
Command 对象的只要的属性和方法有
◆Connection 属性设置或获取 Command对象使用的Connection 对象实例
◆CommandText 属性设置或获取需要执行的sql语句或存储过程名
◆CommandType 属性设置或获取执行语句的类型它有个属性值:StoredProceduce(存储过程) TableDirect Text(标准的SQL语句) 默认是Text
◆Parameters 属性取得参数值集合
◆ExecuteReader 方法执行CommandText指定的SQL语句或存储过程名返回值类型为DataReader
◆ExecuteNonQuery 方法与ExecuteReader 功能相同只是返回值为执行sql语句或存储过程受影响的记录行数
DataReader 的主要属性和方法有
◆FieldCount 属性显示当前数据记录的字段总和
◆IsClosed 属性 判断DataReader 对象是否已经关闭
◆Close 方法关闭DataReader 对象
◆GetString方法以String类型返回指定列中的值
◆Getvalue 方法以自身的类型返回指定列中的值
◆Getvalues 方法返回当前记录所有字段的集合
◆Read 方法将光标指向DataReader对象的下一记录
Sql连接实例
<%@ Import Namespace=SystemData %>
<%@ Import Namespace=SystemDataSqlClient %>
<script language=C# runat=server>
void Page_Load(Object sender EventArgs e) {
SqlConnection Conn=new SqlConnection();
ConnConnectionString=server=(local);database=pubs;uid=sa;pwd=;
ConnOpen();
SqlCommand Comm=new SqlCommand(select * from Authors Conn);
SqlDataReader dr=CommExecuteReader();
dgDataSource=dr;
dgDataBind();
ConnClose();
}
</script>
<asp:DataGrid id=dg runat=server />
Aeccess 数据库连接实例 (OleDbCommand 和 OleDbDataReader 使用实例)
<%@ Page Language=C# %>
<%@ Import Namespace=SystemData%>
<%@ Import Namespace=SystemDataOleDb%>
<script Language=C# Runat=Server>
OleDbDataReader dr;
public void Page_Load(Object srcEventArgs e)
{
string
myConnstring=provider=MicrosoftJetOLEDB; Data
Source=+ServerMapPath()+\\DataBase\\dbmdb;;
string strSel=Select * from BookMark;
OleDbConnection myConn= new OleDbConnection
(myConnstring);
OleDbCommand myComm=new OleDbCommand(strSelmyConn);
myCommConnectionOpen();
dr=myCommExecuteReader();
dgDataSource=dr;
dgDataBind();
myConnClose();
}
</script>
<html>
<body>
<form Runat=Server>
<asp:DataGrid id=dg runat=server />
</form>
</body>
</html>
++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++
DataSet 与DataAdapter
DataReader 对象只能实现对数据的读取不能完成其他的操作
ADONET提供一款更强大的数据操作对象――DataSet 可以将DataSet看成一个非连接的数据库因为DataSet的内部存储结构与数据库很类似拥有数据表(DataTable)数据表关联(DataRelation)DataSet中可以存储多张表等DataSet拥有类似于数据库的结构但它并不等同于数据库首先他可以存储来自数据库的数据而且还可以存储其他格式的数据比如 XML格式文档
查询数据
讲到DataSet的数据库应用先要了解ADONET中的另一个对象DataAdapter
它也分为SqlDataAdapter 和OleDbDataAdapter
建DataAdapte:
OleDbDataAdapter MyAdapter=new OleDbDataAdapter();
SqlDataAdapter MyAdapter=new SqlDataAdapter();
取得的DataAdapter 对象时必须赋予一个连接对象
MyAdapterSelectCommandConnection = MyConn; 或
MyAdapterUpdateCommandConnection =Myconn; 或
MyAdapterDeleteCommandConnection = MyConn; 或
MyAdapterInsertCommandConnection =Myconn;
如果需要执行SQL语句那么还必须给相应的CommandText 属性赋值代码为
MyAdapter*CommandCommandText = SQL语句
写这么多行代码似乎有些麻烦如果你只是查询数据库则可以在建立 DataAdapter实例时就完成上述工作
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strSelectobjConnection);
<%@ Page Language=C# Runat=Server%>
<%@ Import Namespace=SystemData%>
<%@ Import Namespace=SystemDataOleDb%>
<script Language=C# Runat=Server>
public void Page_Load(Object srcEventArgs e)
{
string
MyConnString=Provider=MicrosoftJetOLEDB;Data
Source=+ServerMapPath()+\\DataBase\\dbmdb;;
string strSel=select * from Score;
//建立一个DataSet 实例
DataSet ds=new DataSet();
OleDbConnection MyConn= new OleDbConnection(MyConnString);
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strSelMyConn);
MyAdapterFill(dsScore);
dgDataSource=dsTables[Score]DefaultView;
dgDataBind();
}
</script>
<asp:DataGrid id=dg runat=Server
HeaderstyleBackColor=#aaaadd
AlternatingItemstyleBackColor=#eeeeee
/>
将DataAdapter 于 DataSet 相联系的是 DataAdapter 对象的 Fill 方法他有很多中用法: MyDataAdapterFill(DataSet) MyDataAdapterFill(DataSetTableName)
MyDataAdapterFill(DataSet StartRow RowsCount TableName)
DataSet 绑定至 DataGrid 控件显示:
dgDataSource= dsTables[Score]DefaultView;
dgDataBind();
dgDataSource=ds;
dgDataMember=Score;
dgDataBind();
提示: DataSet中的各种集合访问子项有两种方法一种是用子项的名一种是用数字索引比如要访问表Score可以用: DataSetTables[] 访问 (多张表依次类推)
插入数据: DataSet 的结构和数据库相似所有插入数据实质上就是在DataSet 的数据表里插入一行(DataRow)
//新建一行
DataRow dr= dsTables[Score]NewRow();
dr [Name] = addme;
dr [class] =;
dsTables[Score]RowsAdd(dr); //将新建的行加到DataTable 的DataRow集合中
这样对DataSet的操作仅仅是在DataSet中执行并不影响数据库中的数据要使用DataAdapter 的 Update 方法(有多种方法)
DataAdapterUpdate(DataSet) ; DataAdapterUpdate(DataSet TableName);
更新数据: 实际就是在DataSet 数据行上面直接修改数据
DataRow dr = ds Tables[Score]Rows[]; //取出第一行
dr [Name] = 比尔; //修改
dr [class] =;
如果要更新数据库则再调用 Update 方法
删除数据: 找到相应的数据行然后删除
DataRow dr =dsTables[Score]Row[]; drDelete();
注意: DataAdapter 对象在数据发生改变时并不能自动产生数据库系统所需的交易sql语句所有要建立一个CommandBuilder 对象 它能自动产生交易的sql语句
OleDbCommandBuilder custcb = new OleDbCommandBuilder(MyAdapter);
DataSet 的其他特征
DataSet DataTable 和DataRow 都有一个十分有用的方法RejectChanges
它时操作对象拒绝已经发生的改变将数据复原该方法于AcceptChanges HasErrors等属性连用非常有用
If (DataSetHasErrors)
{
DataSetRejectChanges();
}
else
{
DataSetAcceptChanges();