网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > ADO.NET > 使用ADO.NET的ExecuteScalar 方法返回单一值  

使用ADO.NET的ExecuteScalar 方法返回单一值

2008-07-10  作者:  来源:  点评 投稿 收藏

        若您程序中执行的 SQL statement 或 Stored Procedure,只是要返回计算过的「单一值」,例如:

网管u家u.bitscn@com

        SELECT Count(*) FROM 员工数据表 网管论坛bbs_bitsCN_com

        或只会回传符合条件的「第一笔」record 的「第一个」column 其值,例如:

网管网www_bitscn_com

        SELECT 电子信箱 FROM 员工数据表 WHERE 姓名= 'David' 中国网管联盟bitsCN.com

        我们即可用 Command 对象的 ExecuteScalar 方法 (ADO.NET 1.x 即支援。DbCommand 对象则要 .NET 2.0 才支持),以回传数据集中第一个 row 的第一个 column 其存储值,并忽略其它无用的数据;此种做法比起用ExecuteReader 方法回传「多组」record,再指定给 DataReader 对象,再逐一比对数据,可更有效地节省系统资源并提升「性能 (performance)」。

网管下载dl.bitscn.com

        但由于 ExecuteScalar 方法回传的必为 Object 类型,因此必须由程序员,手动将其强制转型为 .NET 的 int 或 string 等想要的类型,以便直接指派给 int 或 string 类型的变量,或显示在页面上的控件中,如下所示: 中国网管联盟bitsCN.com

        string theMail = (string)cmd.ExecuteScalar();

网管下载dl.bitscn.com

        因此使用 ExecuteScalar 方法时,在程序中必须先确定,承接回传值的变量其类型为何,否则会发生转型错误。此外,在上例中,若「员工数据表」内有超过一个以上叫做「David」的员工,则 ExecuteScalar 方法只会回传「第一个」叫做 David 的员工其电子信箱,而忽略其它亦符合条件的数据。

中国网管联盟bitsCN.com

        此外,ExecuteScalar 方法不只可以用在数据库的 SELECT 作业,亦可用于 INSERT 作业。假设我们想要在 INSERT 一笔 record 至数据库后,马上取得刚才新增那一笔 record 的 Identity (自动增号) 的值,可用下列 SQL statement 达成:

网管联盟bitsCN_com

        string strSql = "INSERT INTO 数据表 (name, age) VALUES ('David', 20); Select @@Identity";

网管下载dl.bitscn.com

        此时,我们即可用 ExecuteScalar 方法,取代 ExecuteNonQuery 方法,去执行上述这一段 SQL statement,以便返回一笔计算过的「单一值」,亦即最新的 Identity 流水号码,关键 ADO.NET 代码如下:

        SqlConnection conn = new SqlConnection(strConnString);
        SqlCommand cmd = new SqlCommand(strSqlStr, conn);
        try
        {
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                // 返回最新的 Identity 流水号码 网管网www.bitscn.com
                intNewestSerialNum = Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
        catch (SqlException ex)
        {
        }

中国网管论坛bbs.bitsCN.com

网管联盟bitsCN_com


TAGs   返回   单一   方法   使用       数据   ExecuteScalar   员工      
 上一篇:使用SqlDataAdapter对象获取数据   下一篇:WinForm特效:同时让两个窗体有激活效果
使用ADO.NET的ExecuteScalar 方法返回单一值 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: