若您程序中执行的 SQL statement 或 Stored Procedure,只是要返回计算过的「单一值」,例如:
SELECT Count(*) FROM 员工数据表
或只会回传符合条件的「第一笔」record 的「第一个」column 其值,例如:
SELECT 电子信箱 FROM 员工数据表 WHERE 姓名= 'David'
我们即可用 Command 对象的 ExecuteScalar 方法 (ADO.NET 1.x 即支援。DbCommand 对象则要 .NET 2.0 才支持),以回传数据集中第一个 row 的第一个 column 其存储值,并忽略其它无用的数据;此种做法比起用ExecuteReader 方法回传「多组」record,再指定给 DataReader 对象,再逐一比对数据,可更有效地节省系统资源并提升「性能 (performance)」。
但由于 ExecuteScalar 方法回传的必为 Object 类型,因此必须由程序员,手动将其强制转型为 .NET 的 int 或 string 等想要的类型,以便直接指派给 int 或 string 类型的变量,或显示在页面上的控件中,如下所示:
string theMail = (string)cmd.ExecuteScalar();
因此使用 ExecuteScalar 方法时,在程序中必须先确定,承接回传值的变量其类型为何,否则会发生转型错误。此外,在上例中,若「员工数据表」内有超过一个以上叫做「David」的员工,则 ExecuteScalar 方法只会回传「第一个」叫做 David 的员工其电子信箱,而忽略其它亦符合条件的数据。
此外,ExecuteScalar 方法不只可以用在数据库的 SELECT 作业,亦可用于 INSERT 作业。假设我们想要在 INSERT 一笔 record 至数据库后,马上取得刚才新增那一笔 record 的 Identity (自动增号) 的值,可用下列 SQL statement 达成:
string strSql = "INSERT INTO 数据表 (name, age) VALUES ('David', 20); Select @@Identity";
此时,我们即可用 ExecuteScalar 方法,取代 ExecuteNonQuery 方法,去执行上述这一段 SQL statement,以便返回一笔计算过的「单一值」,亦即最新的 Identity 流水号码,关键 ADO.NET 代码如下:
|
SqlConnection conn = new SqlConnection(strConnString); |
相关专题
- ADO.NET实用技巧 (6755篇文章)
- .NET移动与嵌入式技术 (6222篇文章)
- .NET开发手册 (5900篇文章)
- ADO和ADO.NET的比较和迁移 (236篇文章)
- ADO.NET与其它语言比较篇 (236篇文章)
- .NET实用开发 (1749篇文章)
- .NET与数据库 (494篇文章)
- (65次浏览)Asp.NET大文件上传组件开发总结(二)---提取文
- (61次浏览)SilverLight数据库访问示例
- (51次浏览)ASP.Net2.0 数据绑定控件的优越性
- (48次浏览)ASP.NET 2.0个性化配置(profile)
- (43次浏览)ASP.NET专家访谈之二:需要马上升级到VS2008
- (37次浏览)VS2008 和.NET Framework3.5新功能及相关技术
- (34次浏览)Web.config详解+asp.net优化方法
- (28次浏览)c#(Socket)同步套接字代码示例
- (26次浏览)ASP.NET 之Form安全认证
- (25次浏览)Asp.NET大文件上传开发总结(二)



