关于ADO.NETExecuteScalar方法揭秘

ADO.NET访问数据库这门技术想必大家都知道的吧,有很多东西值得我们学习,这里就ADO.NET ExecuteScalar方法来简单的介绍一下吧,以后还会介绍更多的方法的。若您程序中执行的 SQL statement 或 Stored Procedure,只是要返回计算过的「单一值」,例如:SELECT Count(*) FROM 员工数据表。或只会回传符合条件的「第一笔」record 的「第一个」column 其值,例如:SELECT 电子信箱 FROM 员工数据表 WHERE 姓名= 'David'。

创新互联服务项目包括池州网站建设、池州网站制作、池州网页制作以及池州网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,池州网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到池州省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

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

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

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

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

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

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

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

 
 
  1. SqlConnection conn = new SqlConnection(strConnString);
  2. SqlCommand cmd = new SqlCommand(strSqlStr, conn);
  3. try
  4. {
  5. conn.Open();
  6. if (conn.State == ConnectionState.Open)
  7. {
  8. // 返回最新的 Identity 流水号码
  9. intNewestSerialNum = Convert.ToInt32(cmd.ExecuteScalar());
  10. }
  11. }
  12. catch (SqlException ex)
  13. {
  14. }

本文题目:关于ADO.NETExecuteScalar方法揭秘
文章转载:http://www.shufengxianlan.com/qtweb/news11/255011.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联