帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > 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编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统