• 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) { ...}

  • 相关阅读:
    使用Maven快速创建一个SpringMVC工程步骤
    签到
    yaml简介
    APP定位元素之UiSelector
    js中var、let、const区别
    用Jquery去写树结构
    正则相关的知识分享
    python常见问题
    Vue.js 的一些小技巧
    关于jsp删除成功,添加成功等之后 页面自动跳转的js写法
  • 原文地址:https://www.cnblogs.com/hakuci/p/1912430.html
Copyright © 2020-2023  润新知