首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > ASP.NET > DataSetCommand 对象读取以及更新数据的方式
【标  题】:DataSetCommand 对象读取以及更新数据的方式
【关键字】:C,at,and,Data,DataSet,Command,man,Com,Set,mm,DataSetCommand
【来  源】:网络

DataSetCommand 对象读取以及更新数据的方式


我们可以利用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:\InetPub\wwwroot\CR\CH05\MyWeb.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:\InetPub\wwwroot\CR\CH05\MyWeb.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:\InetPub\wwwroot\CR\CH05\MyWeb.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:\InetPub\wwwroot\CR\CH05\MyWeb.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:【上一篇】
DataSet 对象与DataSetCommand 对象:【下一篇】
【相关文章】
  • 从资料源取回第二个DataTable
  • For Each...In 循环结构
  • DataView 物件
  • .NET Framework-Microsoft Visual Studio.NET 简介
  • 内建控件(Intrinsic Control)
  • Table Web 控件、TableRow Web 控件及TableCell Web 控件
  • 列举控件(ListControl)
  • AutoPostBack 属性及Page.IsPostBack 属性
  • CheckBox Web 控件
  • CheckBoxList 控件
  • 【随机文章】
  • Oracle数据文件损坏怎样打开数据库
  • sql语句优化的一些小技巧
  • 使用UML进行面向对象分析和设计 :一个Banking System的示例
  • 2006年世界软件业的回顾
  • BIOS错误信息
  • 巧妙的化解分布式拒绝服务攻击(DDoS)
  • 一段模拟按键查找文件的JS
  • 网络三维巨匠Adobe Atmosphere基础教程(1)
  • Solaris 9 for x86 在VM下安装全攻略
  • SQL Server到Oracle连接服务器的实现
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.