c#

位置:IT落伍者 >> c# >> 浏览文章

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


发布日期:2018年10月05日
 
用ADO.NET的ExecuteScalar方法返回单一值

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

SELECT Count(*) FROM 员工数据表

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

SELECT 电子信箱 FROM 员工数据表 WHERE 姓名= David

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

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

string theMail = (string)cmdExecuteScalar();

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

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

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

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

SqlConnection conn = new SqlConnection(strConnString);

SqlCommand cmd = new SqlCommand(strSqlStr conn);

try

{

connOpen();

if (connState == ConnectionStateOpen)

{

// 返回最新的 Identity 流水号码

intNewestSerialNum = ConvertToInt(cmdExecuteScalar());

}

}

catch (SqlException ex)

{}

上一篇:利用Visual C# 2005制作简单动画效果

下一篇:C#浅拷贝与深拷贝区别