帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > 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编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·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
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统