zoukankan      html  css  js  c++  java
  • ASP.NET ExecuteScalar,ExecuteNonQuery

    ExecuteScalar和ExecuteNonQuery

      如果想返回像Count(*)、Sum(Price)或Avg(Quantity)的结果那样的单值,可以使用 Command.ExecuteScalar。ExecuteScalar返回第一行第一列的值,将结果集作为标量值返回。因为单独一步就能完成,所以 ExecuteScalar不仅简化了代码,还提高了性能;要是使用DataReader就需要两步才能完成(即,ExecuteReader+取值)。

      使用不返回行的SQL语句时,例如修改数据(例如INSERT、UPDATE或DELETE)或仅返回输出参数或返回值,请使用ExecuteNonQuery。这避免了用于创建空DataReader的任何不必要处理。

      测试Null

      如果表(在数据库中)中的列允许为空,就不能测试参数值是否“等于”空。相反,需要写一个WHERE子句,测试列和参数是否都为空。下面的 SQL语句返回一些行,它们的LastName列等于赋给@LastName参数的值,或者LastName列和@LastName参数都为空。

    SELECT * FROM Customers
    WHERE ((LastName = @LastName) OR (LastName IS NULL AND @LastName IS NULL))

     

    SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影响的行数。
    对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1
    所以在查询表中是否有(某条)数据的时候,一定不能用select sql语句+ cmd.ExecuteNonQuery(),通过判断返回值是否大于0来判断。
    解决方案:
    1.

    SqlCeCommand.ExecuteScalar 方法 ( + 聚合查询)

    执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。 例如一个聚合值。

    cmd.CommandText = "select count(*) from users where id = 10000;"

    int count = (int)cmd.ExecuteScalar() ;

    2. 用ExcuteReader()方法返回一个reader

    if(reader.Read() == false) { ...}

  • 相关阅读:
    字符串的全排列

    链表
    青蛙跳一格或者两格,n格跳法
    二叉树
    Concurrent实现原理
    sql语句总结 (转) http://blog.csdn.net/fengfeng91/article/details/15029173
    ArrayList实现原理
    java虚拟机 内存分配
    【转】关于Quartus ii无法识别Modelsim路径的问题
  • 原文地址:https://www.cnblogs.com/hakuci/p/1912430.html
Copyright © 2011-2022 走看看