帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统v4.6
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程 >
从数据源取回数据--Command 物件简介
作者:佚名 发布时间:2005-04-02 来源:不详
 


Command 物件简介
    虽然我们刚刚已经和数据源联机了,但是还必须透过Command 对象来对数据源进行数据操作的工作。Command 对象最主要的工作是透过Connection 对象对数据源下达操作数据库的命令。我们以下列语法产生Command 对象:

Dim cmA As Command=New ADOCommand

或是在产生对象的时候顺便指定属性:

Dim cmA As Command=New ADOCommand("CommandText",ActiveConnection)

    当我们将Command 对象建立好之后,就可以设定Command 对象的属性了。首先我们先来了解Command 对象有哪些常用的属性:


ActiveConnection
    ActiveConnection 属性是设定Command 对象对数据源的操作要透过哪个Connection 对象,例如我们想透过cnA 这个Connection 对象对数据源进行数据操作:

cmA.ActiveConnection=cnA

CommandType
    CommandType 属性可以用来指定CommandText 属性中的内容是SQL 陈述、数据表名称还是预存程序,如下表所示:

    如果本属性没有指定,则为默认值CommandType.Text。例如我们指定要以数据表名称将数据表内的数据全部传回来,则设定为:

cmA.CommandType=CommandType.TableDirect

CommandText
    视CommandType 属性设定,表示要下达到数据源的内容是SQL 陈述、数据表名称或预存程序名名。例如下列范例中直接输入数据表名称,将数据表中的所有数据传回:

cmA.CommandType=CommandType.TableDirect
cmA.CommandText="Members"

    设定好Command 对象的属性后,接下来是Command 对象常用的方法:


Execute
    Command 物件最常用的方法是Execute,Execute 方法可以将CommandText 属性中的数据传到数据源。例如下面范例中,使用者可以在文字输入盒中输入SQL 陈述,并会显示所输入的叙述影响资料源的笔数:

<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<Html>
<Form id="F1" Runat="Server">
请输入SQL 陈述: <Input Type="Text" Id="Text1" Runat="Server" >
<Button ID="Button1" Runat="Server" OnServerClick="Button1_Click">
执行
</Button>
</form>
<Span ID="Sp1" Runat="Server"/>
<Script Language="VB" Runat="Server">
Sub Button1_Click(sender As Object, E As EventArgs)
Dim cnA As ADOConnection=New ADOConnection
Dim cmA As ADOCommand=New ADOCommand
cnA.Provider="Microsoft.Jet.OLEDB.4.0"
cnA.DataSource="C:Inetpubwwwrootcrch05MyWeb.mdb"
cnA.UserID="Admin"
cnA.Open()
cmA.ActiveConnection=cnA
cmA.CommandType=CommandType.Text
cmA.CommandText=Text1.Value
cmA.Execute()
Sp1.InnerText="这个叙述影响了" & cmA.RecordsAffected & "笔资料"
End Sub
</SCRIPT>
</Html>


例如我们将使用者tina 密码修改成9876,我们在文字输入盒输入下列叙述:

Update Members Set UserPwd= '9876' Where UserId='tina'



产生独立的Command 对象
    要使用Command 对象,不一定要明确的宣告一个Connection 对象。我们只要在产生Command对象的时候,将ActiveConnection 参数所要指定的连结对象改成ConnectionString 即可。不过独立的Command 对象并不代表不需要Connection 对象,而是Command 对象会自动产生。在使用独立的Command 对象之前要明确的将连结打开,我们可以利用ActiveConnection.Open()方法来开启连结,如下所示:

Dim cmA As ADOCommand = New _
ADOCommand("SQL 陈述", "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Inetpubwwwrootcrch05MyWeb.mdb;" & _
"User ID=Admin"
cmA.ActiveConnection.Open() '将连结打开
下列范例我们利用控件将数据输入数据源:
<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<Form Id="Form1" Runat="Server">
使用者账号: <Input type=text id="Text1" runat=server><br>
使用者密码: <Input type=text id="Text2" runat=server><br>
使用者姓名: <Input type=text id="Text3" runat=server><br>
使用者电话: <Input type=text id="Text4" runat=server><br>
使用者住址: <Input type=text id="Text5" runat=server><br>
E-Mail 信箱: <Input type=text id="Text6" runat=server><br>
<Button Id=Button1 Runat="Server"
OnServerClick="Button1_Click">确定
</Button>
</FORM>
<Span Id="Sp1" Runat="Server"/>
<Script Language="VB" Runat="Server">
Sub Button1_Click(Sender As Object, e As EventArgs)
Dim strConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:InetPubwwwrootCRCH05MyWeb.mdb"
Dim cmA As ADOCommand = New ADOCommand("",strConStr)
CmA.ActiveConnection.Open()
cmA.CommandText="Insert Into Members Values('" & _
Text1.Value & "','" & Text2.Value & "','" & _
Text3.Value & "','" & Text4.Value & "','" & _
Text5.Value & "','" & Text6.Value & "')"
cmA.Execute()
Sp1.InnerText="这个叙述影响了" & cmA.RecordsAffected & "笔资料"
End Sub
</SCRIPT>



DataReader 物件
    如果我们利用Command 对象所执行的命令是有传回数据的Select 叙述,此时Command 对象会自动产生一个DataReader 对象。DataReader 是我们写ASP.NET 网页的好朋友,因为我们常常会将数据源的数据取出后显示给使用者,这时候我们就可以使用DataReader 对象。我们就可以在执行Execute 方法时传入一个DataReader 型态的变量来接收。DataReader 对象很单纯的一次只读取一笔纪录,而且只能只读,所以效率很好而且可以降低网络负载。由于Command对象自动会产生DataReader 对象,所以我们只要宣告一个指到DataReader 对象的变量来接收即可,并不需要使用New 运算子来产生;另外要注意的是DataReader 对象只能配合Command对象使用,而且DataReader 对象在操作的时候Connection 对象是保持联机的状态。下列程序代码片段传回可以读取Members 数据表中所有的纪录的DataReader 对象:

Dim cmA As ADOCommand=New _
ADOCommand("命令字符串","Provider=Microsoft.Jet.OLEDB.4.0;"
& _
"Data Source=C:Inetpubwwwrootcrch05MyWeb.mdb")
Dim drA as ADODataReader
cmA.ActiveConnection.Open()
cmA.CommandText="Select * From Members"
cmA.Execute(drA)

    当我们将DataReader 对象传入Execute 方法后,就可以使用DataReader 对象来读取数据了。以下为DataReader 常用的属性:


    了解DataReader 对象有什么属性后,我们就可以利用DataReader 所提供的方法来取回资料了。下表为DataReader 常用的方法:


Read 方法
    在取得Command 对象执行Execute 方法所产生的DataReader 对象后,我们就可以将纪录中的数据取出使用。DataReader 一开始并没有取回任何数据,所以我们要先使用Read 方法让DataReader 先读取一笔数据回来。如果DataReader 对象成功取得数据则传回True,若没有取得资料则传回False。这样一来我们就可以利用Do While...Loop 循环来取得所有的数据,如下程序所示:

Do While drA.Read()
Response.Write("User Id: " & drA.Item("UserId") & ", Password: ")
Response.Write(drA.Item(1) & "<br>")
Loop


    上述程序代码片段利用Read 方法将数据取回后,再利用Item 集合以键值(Key)的方式取出UserId 字段的数据,以及利用索引值(Index)取得使用者UserPwd 字段的数据;索引值是由0开始计数,故第一个字段的索引值为0,依此类推。当数据读取完毕后Read 方法会传回False,所以就跳出循环。

GetValue 方法
    我们也可以使用GetValue 方法取得指定字段内的记录,这个方法和Item 属性很像;不过GetValue 方法的参数只接收索引值,并不接收键值为参数。我们改用GetValue 取得所有字段内的数据,如下程序所示:

Do While drA.Read()
Response.Write("User Id: " & drA.GetValue(0) & ", Password: ")
Response.Write(drA.GetValue(1) & "<br>")
Loop

GetValues 方法
    GetValues 方法是取得字段内所有的记录。这个方法接收一个数组,并且将所有字段填入数组中,如下程序所示:

Dim arValue(drA.FieldCount)
drA.Read() '先抓取一笔记录
drA.GetValues(arValue) '将记录填入数组中
For shtI=0 To drA.FieldCount - 1
Response.Write(drA.GetValue(shtI) & "<br>")
Next


    因为索引值是由零开始算,所以我们在使用For...Next 循环的时候记得将结束值减一


GetDataTypeName 以及GetName 方法
    GetDataTypeName 方法可以传回指定字段的数据型态,而GetName 方法则是传回指定字段的字段名称(就是键值)。这两个方法一样以键值或是索引的方式来指定字段。下列程序代码片段显示每个字段的名称以及数据型态:

Dim shtI As Short
For shtI = 0 To drA.FieldCount - 1
Response.Write("索引值为" & shtI.ToString & " 的字段, 名称为: " & _
DrA.GetName(shtI) & ", 数据型态: " & DrA.GetDataTypeName(shtI) &
"<br>")
Next




Close 方法
Close 方法可以关闭DataReader 对象和数据源之间的联机。除非把DataReader 对象关闭,否
则当DataReader 对象尚未关闭时,DataReader 所使用的Connection 对象就无法执行其它的
动作。

综合范例
下列范例在文字输入盒内输入数据表名称,按下确定后程序会将数据表的索引、字段名称、字段
型态以及字段内容全部显示出来:

<%@Import Namespace=System.Data.ADO%>
<%@Import Namespace=System.Data%>
<Html>
<Form Id="F1" Runat="Server">
<Input Id="Text1" Runat="Server" Value="Members"/>
<Button Id="Button1" OnServerClick="Button1_Click"
Runat="Server">执行
</Button>
</Form>
<Script Language="VB" Runat="Server">
Sub Button1_Click(sender As Object, E As EventArgs)
Dim cmA As ADOCommand=New _
ADOCommand("","Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Inetpubwwwrootcrch05MyWeb.mdb")
Dim drA As ADODataReader
Dim shtI As Short
cmA.ActiveConnection.Open()
cmA.CommandType=CommandType.TableDirect
cmA.CommandText=Text1.Value
cmA.Execute(drA)
For shtI=0 To drA.FieldCount - 1
Response.Write("字段索引值: " & shtI.ToString & _
" 字段名称: " & drA.GetName(shtI) & _
" 数据型态: " & drA.GetDataTypeName(shtI) & "<br>")
Next
Do While drA.Read()
For shtI=0 To drA.FieldCount-1
Response.Write(drA.GetValue(shtI) & " / ")
Next
Response.Write("<br>")
Loop
End Sub
</SCRIPT>
</Html>


 
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·从数据表中取出第n条到第m条的记  (2005-03-12)
 ·使用JDOM操作XML系列文章一 从数  (2005-03-12)
 ·使用JDOM操作XML系列文章二 从数  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·帝国网站管理系统采集使用教程
·帝国网站管理系统模板制作教程
·帝国CMS模板下载
·Discuz6.0.1UC版通行证发布
·帝国网站管理系统之网站迁移教程
·帝国网站管理系统实例入门教程下载
·《帝国网站管理系统》实例入门教程
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统