[ADO.NET] DataReader的 RecordsAffected属性 / 新增、删除、修改的 .ExecuteNonQuery()方法之传回值...


[ADO.NET] DataReader的 RecordsAffected属性 / 新增、删除、修改的 .ExecuteNonQuery()方法之传回值

原文出处:http://www.dotblogs.com.tw/mis2000lab/archive/2011/04/15/datareader_recordsaffected_20110415.aspx


建议各位还是参阅微软官方的 MSDN网站最清楚了。

资料来源: http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqldatareader.recordsaffected.aspx


可以作为 ASP.NET案例精编(清华大学出版社)

(上集)的 Ch. 14 一点小小补充




RecordsAffected属性
取得 Transact-SQL 陈述式的执行所变更、插入或删除的数据列数目。


属性值

型别:System.Int32

变更、插入或删除的数据列数目;如果没有任何数据列受影响或陈述式失败,则为 0SELECT 陈述式则为 -1

我对上面这句话比较感兴趣。

另外他强调了三件事:

RecordsAffected属性会在所有数据列已读取,且您关闭 SqlDataReader 之后才会设定。
这个属性值为累计。例如,如果两个数据录插入于批次模式,则 RecordsAffected 的值将是二。


IsClosed
RecordsAffected 是在关闭 SqlDataReader 之后,您唯一可以呼叫的属性。


=========================================



<<行前练习>>

以下的范例,都使用到这个简单的观念,请参考:

初探ADO.NET #1,程序与数据库互动的四大步骤

http://www.dotblogs.com.tw/mis2000lab/archive/2008/08/15/4918.aspx

如果您没有看过书,或是对于 ADO.NET没底子,最好先把这几篇文章看完再说:

ADO.NET入门文章(书本文章公开 / 下载)#1 -- 各种基础范例
http://www.dotblogs.com.tw/mis2000lab/archive/2011/01/14/ado_net_book_sample_20110114.aspx



ADO.NET入门文章(书本文章公开 / 下载)#2 -- Stored Procedure / NextResult方法 / MARS
http://www.dotblogs.com.tw/mis2000lab/archive/2011/01/14/ado_net_book_sample_2_20010114.aspx




ADO.NET入门文章(书本文章公开 / 下载)#3 -- MARS与简单的「留言版」范例
http://www.dotblogs.com.tw/mis2000lab/archive/2011/01/14/ado_net_book_sample_3_20111114.aspx



 
=========================================

<<范例一>>

以前,我们都知道,撰写「新增」、「删除」、「修改」的SQL指令时,
需要使用 SqlCommand的 .ExecuteNonQuery()方法


完成后,他会传回一个整数值,代表「这个指令影响了几列纪录」。

简单的范例如下:





'----自己(宣告)写的----
Imports System
Imports System.Web.Configuration
Imports System.Data
Imports System.Data.SqlClient
'----自己(宣告)写的----



    Protected Sub Page_Load(sender As Object, e As System.EventArgs)
Handles Me.Load

       
'== (1). 开启数据库的连结。
        Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("Web.Config文件里面的DB连结字符串").ConnectionString)
        Conn.Open()


       
'== (2). 执行SQL指令。或是查询、捞取数据。
        Dim cmd As SqlCommand = New SqlCommand("Update test set title = '真珠草萃取物可以治疗肝炎 韩国技转锦鸿' where id =3", Conn)

       
'== (3). 自由发挥。
        Dim RecordsAffected As Integer = cmd.ExecuteNonQuery()

        Label1.Text= "执行 Update的SQL指令以后,影响了" & RecordsAffected & "列的纪录。"

'-- 或者是,您可以这样写,代表有更动到一些纪录。



' If RecordsAffected > 0 Then
'    Response.Write("资料更动成功。共有" & RecordsAffected  & "列纪录被影响。")
' End If


       
'== (4). 释放资源、关闭数据库的连结。
        cmd.Cancel()


        If (Conn.State = ConnectionState.Open) Then

            Conn.Close()
            Conn.Dispose()

        End If

    End Sub





=========================================


<<范例二>>

而 SqlDataReader的 RecordsAffected属性

在MSDN网站上有强调两件事:
'==
重点(1)    IsClosed属性和 RecordsAffected属性是在关闭 SqlDataReader之后,您还可以呼叫的两个属性。

'== 重点(2)    使用Select陈述式则 RecordsAffected属性为 -1

写了一个简单范例,真的是如此。



'----自己(宣告)写的----
Imports System
Imports System.Web.Configuration
Imports System.Data
Imports System.Data.SqlClient
'----自己(宣告)写的----




    Protected Sub Page_Load(sender As Object, e As System.EventArgs)
Handles Me.Load

        '== (1).开启数据库的连结。
        Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("Web.Config文件里面的DB连结字符串").ConnectionString)
        Conn.Open()

       
       '== (2). 执行SQL指令。或是查询、捞取数据。
        Dim cmd As SqlCommand = New SqlCommand("Select * From test", Conn)
        Dim dr As SqlDataReader = cmd.ExecuteReader()



        '== (3).自由发挥。把捞出来的纪录,呈现在画面上。
        GridView1.DataSource = dr
        GridView1.DataBind()



        '== (4).释放资源、关闭数据库的连结。
        If Not (dr Is Nothing) Then

            cmd.Cancel()

            dr.Close()

        End If

       
'******************************

Label1.Text = "执行 Select SQL指令以后,影响了" & dr.RecordsAffected & "列的纪录。"
       
'==
重点(1)    IsClosed属性和 RecordsAffected属性是在关闭 SqlDataReader之后,您还可以呼叫的两个属性。
'==
重点(2)    使用Select陈述式则 RecordsAffected属性为(-1)
'******************************

        If (Conn.State = ConnectionState.Open) Then
            Conn.Close()

            Conn.Dispose()

        End If

    End Sub




今日值班正妹,林志玲

图片来源: 
http://www.nownews.com/photo/photo.php?phid=6872#tphoto


i1697432.jpg


 


 
 
 
 
 
 
 
 
 
 
 
 











转载于:https://www.cnblogs.com/mis2000lab/articles/DataReader_RecordsAffected.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值