帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程 >
DataSetCommand 对象读取以及更新数据的方式
作者:佚名 发布时间:2005-04-02 来源:不详
 


我们可以利用DataSetCommand 对象来执行下列的工作:
    1. 将数据源的记录取回,并植入DataSet 对象作管理。我们可以利用DataSetCommand 对象的FillDataSet 方法来将取得的数据填入
DataSet 对象中。当我们执行这个方法的时候,它会将SQL Select 的叙述送至数据源。

    2. 将DataTable 的内容传回数据源。要将DataSet 中的DataTable 对象所作的变更传回数据源作更新,我们可以使用DataSetCommand 对象的Update 方法。当我们使用这个方法时,它会将所需要的SQL Insert、Update 或是Delete 传回数据源。Update 这个方法会检查每一个DataRow 的状态,若DataRow 是新增加的,该方法就下达Insert 的SQL 命令;若DataRow 有被修改过,该方法就下达Update 的SQL 叙述;若DataRow 被删除,则下达Delete 的SQL 叙述。

DataSetCommand 操作数据源的属性
    所以DataSetCommand 中有四个属性,而这四个属性其实都是Command 对象;分别是SelectCommand、InsertCommand、UpdateCommand 以及DeleteCommand 属性。虽然我们可以明确宣告DataSetCommand 中这些对资料源执行更新动作的Command 对象,并设定好该Command 对象的CommandText 属性,并指定适当的SQL 叙述来达到对数据源的Insert、Update 以及Delete 等目的;但是实际上DataSetCommand 对象会自动产生它所需要的SQL陈述,并不需要我们特别指定。

例如我们将数据从数据源取回,放到DataSet 对象中的DataTable 对象,其数据表内容如下表所示:

    其中DataRow 对象中有一个用来表示记录内的数据有无改变的RowState 属性,预设都是未改变(Unchanged)。假设程序将jolin 的UserTel 字段内容改掉,其字段状态就会变成已改变(Modified),如下表所示:

    当我们使用DataSetCommand 对象的Update 方法,将DataSet 的状态更新回数据源时,DataSetCommand 对象会去检查DataTable 中每一笔记录的RowState。当DataSet 对象检查第一笔和第二笔时,并不会产生任何SQL陈述,因为RowState 属性标示为未改变(Unchanged);当检查到第三笔时,因为RowState 标示为已改变(Modified),Update 方法会自动产生适当的SQL 叙述并且传送到数据源。

使用DataSetCommand 对象
    DataSetCommand 对象可以说是DataSet 对象的工作引擎,DataSet 和数据源的互动都是由DataSetCommand对象来执行;而DataSetCommand 则是控制Command对象透过Connection对象对数据源下命令,和数据源进行互动的工作。以下为DataSetCommand 的宣告语法:

Dim 变数As DataSetCommand = New DataSetCommand()

    我们先来了解DataSetCommand 对象和其它数据操作对象如何搭配使用:

Dim strConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:InetPubwwwrootCRCH05MyWeb.mdb"
Dim strComStr As String = "Select * From Members"
Dim cnA As ADOConnection = New ADOConnection(strConStr) '宣告及产生
Connection 对象
Dim cmA As ADOCommand = New ADOCommand(strComStr) '宣告及产生Command
对象
Dim dscA As ADODataSetCommand = New ADODataSetCommand() '产生
DataSetCommand
cmA.ActiveConnection = cnA '指定Command 对象cmA 要透过cnA 这个
Connection 对象下命令
dscA.SelectCommand = cmA '指定DataSetCommand 要从数据源取回数据
要透过cmA 这个
'Command 物件来对Connection 下达命令

    其中在使用New 运算子建构DataSetCommand 时,也可以顺便作初值设定的工作,如下语法所示:

Dim 变量As DataSetCommand = New DataSetCommand(Command 对象名)

    例如下列范例于宣告Command 对象时,直接指定Command 对象所要执行的命令,以及要透过哪个Connection 对象;并在宣告DataSetCommand 时,直接指定所要使用的Command 对象名称:

Dim strConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:InetPubwwwrootCRCH05MyWeb.mdb"
Dim strComStr As String = "Select * From Members"
Dim cnA As ADOConnection = New ADOConnection(strConStr)
Dim cmA As ADOCommand = New ADOCommand(strComStr, cnA)
Dim dscA As ADODataSetCommand = New ADODataSetCommand(cmA)

    甚至还可以不需要明确宣告Connection 对象以及Command 对象,直接以命令文字以及联机字符串来代替,如下语法所示:

Dim 变量As DataSetCommand = New DataSetCommand("命令字符串","联机字符
串")

    例如下列范例于宣告DataSetCommand 对象时,直接指定DataSetCommand 对象所要执行的命令,以及如何建立Connection 对象和数据源连结。我们在使用这个DataSetCommand 对象时,它会自动建立并管理Command 对象以及Connection 对象:

Dim strConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:InetPubwwwrootCRCH05MyWeb.mdb"
Dim strComStr As String = "Select * From Members"
Dim dscA As ADODataSetCommand = New ADODataSetCommand(strComStr,
strConStr)

    这样程序就清楚多了。接下来我们就要利用DataSetCommand 从数据源取回数据,并填入DataSet 对象。以下为宣告的语法:

Dim 变量As DataSet = New DataSet(["DataSet 名称"])

    要从数据源取回数据并填入DataSet 对象,我们利用DataSetCommand 对象的FillDataSet 方法。以下为FillDataSet 方法的语法:

DataSetCommand.FillDataSet(DataSet, "DataTable 名称")

    我们利用DataSetCommand 和数据源联机,它会自动管理Connection 对象以及Command 对象,所以DataSetCommand 使用的Connection 对象并不需先用Open 方法打开。我们在呼叫DataSetCommand 对象的FillDataSet 时,如果Connection 对象没有开启和数据源的连结,DataSetCommand 对象会自动呼叫Connection 对象的Open 方法将对数据源的连结打开;DataSetCommand 对数据源的操作执行完毕后,会自动将Connection 对象和数据源的连结利用Connection 对象的Close 方法关闭。如果DataSetCommand 在执行FillDataSet 方法时Connection 对象已经开启连结,在执行完毕后DataSetCommand 会维持Connection 对象原来开启连结的状况。下列范例使用DataSetCommand 对象从数据源撷取数据回来,并填入DataSet对象中:

<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object, e As EventArgs)
Dim strConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:InetPubwwwrootCRCH05MyWeb.mdb"
Dim strComStr As String = "Select * From Members"
Dim dscA As ADODataSetCommand = New
ADODataSetCommand(strComStr,strConStr)
Dim dsDataSet As DataSet = New dataset()
dscA.FillDataSet(dsDataSet, "Members") '将数据填入数据表内, 并取
名为Members
Dim shtI As Short
For shtI=1 To (dsDataSet.Tables("Members").Rows.Count).ToInt16
Response.Write(dsDataSet.Tables(0).Rows(shtI-1)("UserName") &
"<BR>")
Next
End Sub
</SCRIPT>

    上述范例将数据将所取回的DataTable 对象填入DataSet 对象中的Tables 集合,我们可就可以利用Index 或是DataTable 名称的方式来取出集合中的对象。取出DataTable 对象后,我们可以利用DataTable 中Rows 集合的Count 属性取得总共有几笔记录,并将这些记录全部显示出来。由于Rows 集合是由0 开始计算,所以我们最后一个DataRow 对象的Index 值总是比Count属性少1。
 
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·从资料源取回第二个DataTable  (2005-04-02)
 ·DataView 物件  (2005-04-02)
 ·Web控件与数据源的系结(Data Bi  (2005-04-02)
 ·DataList Web--OnItemCommand 事  (2005-04-02)
 ·DataList Web 控件  (2005-04-02)
 ·系结至DataView  (2005-04-02)
 ·DataGrid Web 控件的基础应用  (2005-04-02)
 ·DataGridPager 样式  (2005-04-02)
 ·DataGrid Web 控件  (2005-04-02)
 ·DataGrid Web 控件的进阶应用--使  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·放眼未来 帝国近期将有重大举措!
·PHPWind6.3.2版通行证发布
·帝国备份王2008版正式发布
·帝国备份王2008版发布
·phpcms2007转帝国CMS5.0程序发布
·dedecms5.1转帝国CMS5.0程序发布
·帝国网站管理系统V5.0商业购买说明
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统