ExecuteScalar方法

ExecuteScalar方法oRs.Open”SELECTCOUNT(*)AsiRowCountFROMOrders”iCount=oRs.Fields(“iRowCount”).ValueADO.NET引入了一种从查询的结果中获取单值的新方式,可以用于预计只返回一行和一列的场合。ADO.NETCommand对象有一个ExecuteScalar方法,它从相关的查询中返回第一行和第一列的值。因为不用创建行集、查

大家好,又见面了,我是你们的朋友全栈君。

oRs.Open “SELECT COUNT(*) As iRowCountFROMOrders”

iCount=oRs.Fields(“iRowCount”).Value

ADO.NET引入了一种从查询的结果中获取单值的新方式,可以用于预计只返回一行和一列的场合。ADO.NETCommand对象有一个ExecuteScalar方法,它从相关的查询中返回第一行和第一列的值。因为不用创建行集、查找值并关闭行集,所以这样所产生的系统开销非常小。ExecuteScalar方法已经针对需要检索单值的特定场合进行了优化。下例实现的功能与前例相同,只不过使用的是ASP.NET和ADO.NET以及ExecuteScalar方法:

string sSql = “SELECTCOUNT(*) As iRowCountFROMOrders”;

SqlCommandoCmd=newSqlCommand(sSql,oCn);

oCmd.CommandType = CommandType.Text;

int iCount = (int)oCmd.ExecuteScalar();

检索单值的另一种方式是使用存储过程的输出参数。例如,这一技术也可以从一个单行中检索许多值。它在ADO和ADO.NET中都适用,虽然ADO.NET已经扩展了输出参数的功能。在ADO.NET中为了从Command对象获取输出变量的值,应该使用ExecuteNonQuery方法执行查询。该方法能够通知ADO.NET,查询不会返回一个行集,因此避免了DataSet或者DataReader的系统开销:

oCmd.ExecuteNonQuery();

oCmd.UpdatedRowSource=UpdateRowSource.OutputParameters;

intiOrderID=(int)oCmd.Parameters[“@OrderID”].Value;

此段代码将UpdatedRowSource属性设置为指向输出参数(假定它们已经进行了设置),然后就可以检索输出值了。在传统的ADO中这是在Connection对象的Execute方法中使用晦涩难懂的参数实现的,而我们可以看到,在ADO.NET中实现这一点已经非常简单了。当然,ADO.NET还有一个为返回标准行集进行了优化的方法—Command对象的Execute方法。在传统的ADO中,Recordset对象能够设置UPDATE、INSERT和DELETE语句,这些语句是为了使Recordset能够将对自己的任何更改应用于基础数据库所必需的。虽然这一功能非常方便,但因为必须要返回给数据库以决定如何实现,所以,它也增加了系统开销。ADO.NET对象通过CommandBuilder对象也可以实现这一点;但同样也存在着系统开销的问题。在大多数开发场景中,要求使用的确切SELECT、INSERT、UPDATE和DELETE语句在设计时是已知的。在传统的ADO中,没有什么简单的办法将操作查询与Recordset相关联从而来使用它们。而在ADO.NET中,DataAdapter有四个不同的Command对象与其相关联,可以表示每个操作查询以及SELECT语句。这使DataAdapter能够协助我们用查询的结果填充一个DataSet,还能提前通知DataAdapter对数据库发出操作查询。虽然这需要在设计时投入更多的编码工作,但是代码的增加换来的是性能上的改善(就更不用说代码易于理解所带来的维护上的轻松了)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149109.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pytorch搭建ResNet18

    Pytorch搭建ResNet18ResNet代码importtorchimporttorchvisionimporttorch.nnasnnimporttorch.nn.functionalasFimportmatplotlib.pyplotaspltimportnumpyasnp#definestructureclassBasicBlock(nn.Module):def__init__(self,in_planes,planes,stride=1):

    2022年5月26日
    48
  • rk3399调试ov2659(camera模块@dvp接口)–移植过程

    rk3399调试ov2659(camera模块@dvp接口)–移植过程刚接手某款硬件,嵌入式开发者往往对硬件熟悉,而对实现硬件行为的软件及其软件框架不太熟。所以,我们一般从硬件拓扑图入手,分析数据流和硬件动作过程来熟悉或编写软件框架,并向该框架填充一些逻辑/业务代码来实现最终的驱动代码。

    2022年4月30日
    254
  • ubuntu20.04内核降级_ubuntu内核版本查看

    ubuntu20.04内核降级_ubuntu内核版本查看ubuntu内核突然变了,导致nvidia显卡驱动用不了:进行内核降级:解决方法:查找可用的内核版本:#grepmenuentry/boot/grub/grub.cfg修改grub:#vim/etc/default/grub找到:GRUB_DEFAULT=0修改为:GRUB_DEFAULT=“AdvancedoptionsforUbuntu>Ubuntu,w…

    2022年8月23日
    8
  • pycharm安装插件报错怎么办_pycharm安装哪些插件

    pycharm安装插件报错怎么办_pycharm安装哪些插件Pycharm安装插件Pycharm安装插件Pycharm中一些值得安装的插件RainbowBracketsIdeaVimMarkdownNavigatorTranslation如果说编辑器是程序员的武器,那么插件就是装备加成。插件可以让编写代码更加灵活Pycharm安装插件点击file–settings,进入设置找到apperance中的Plugins,在搜索框中搜索想要的插件,然后点击安装即可Pycharm中一些值得安装的插件RainbowBrack

    2022年8月26日
    9
  • PHP的反射类ReflectionClass、ReflectionMethod使用实例

    PHP的反射类ReflectionClass、ReflectionMethod使用实例简介PHPReflectionAPI是PHP5才有的新功能,它是用来导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。用得比较多的就只有两个ReflectionClass与ReflectionObject,两个的用法都一样,只是前者针对类,后者针对对象,后者是继承前者的类;然后其中又有一些属性或方法能返回对应的Reflection对象反射是什么?它是指在PHP运行状态中,扩展分析PH…

    2025年6月11日
    5
  • eplan永久激活码【2021免费激活】「建议收藏」

    (eplan永久激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    2.5K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号