zoukankan      html  css  js  c++  java
  • 有关ExecuteNonQuery返回值的分析

      ADO.NET 数据命令使您能够直接对数据库或其他数据源执行命令,而不需要数据集或数据适配器。有关更多信息,请参见 Visual Studio 中的 DataCommand 对象介绍

      1.可针对数据库执行的某些类型的数据命令除了返回一个指出命令成功的值以外不返回任何值。

      这些命令类型包括:

    • 数据库定义 (DDL) 命令,用于创建和管理数据库结构(如表和存储过程)。
    • 更新命令(“更新”(Update)、“插入”(Insert) 和“删除”(Delete) 语句)。

      必须使用数据库命令执行 DDL 操作;没有其他方法可以在 ADO.NET 中执行这些任务。

      如果正在使用数据集,则不需要使用单独的数据命令执行数据库更新。而是使用数据适配器更新数据库。有关更多信息,请参见 Visual Studio .NET 中的数据集更新。但是,如果使用的不是数据集,则可以直接向数据库发送更新命令。有关数据集相对于数据命令的优点的更多信息,请参见数据访问策略建议

      对于这两种类型的命令,命令都返回一个整数指示操作的成功与否。返回值因是要更新记录还是发出 DDL 命令而异:

    • 如果要创建或修改数据库结构,当操作成功时返回值为 -1。
    • 如果要更新记录,则返回值指示受到该操作影响的记录数。

      在两种情况下,如果操作失败,命令都返回零。

      2、注意 ExecuteNonQuery() 返回值问题 
      ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,所以执行这种操作时最好用try--catch--语句来容错。
       例如用ExecuteNonQuery()方法执行create和alter操作

    View Code
                SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=PSDB;Integrated Security=SSPI");
                string str = "CREATE TABLE aaa ( " +
                            "[ID] [int] IDENTITY (1, 1) NOT NULL , " +
                            "[BasicID] [int] NULL ," +
                            "[AdoptedName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," +
                            "[AdoptedSex] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ," +
                            "[AdoptBirthday] [smalldatetime] NULL ," +
                            "[AdoptedType] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ," +
                            "[ApprTime] [smalldatetime] NULL ," +
                            "[Remark] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL " +
                            ") ON [PRIMARY]   ";
    
                SqlCommand comm = new SqlCommand(str, conn);
                int i = 10;
                try
                {
                    conn.Open();
                    i = comm.ExecuteNonQuery();
                    conn.Close();
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
    
                Response.Write(i.ToString());

      如果执行成功的话返回的值为-1,如果数据表已经存在的话返回异常:数据库中已存在名为 'aaa' 的对象。

      备注:

      您可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。

      虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。

      对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

      http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executenonquery(VS.80).aspx

      http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.executenonquery.aspx

      经鉴定:

      SqlCommand.ExecuteNonQuery()执行Create,Drop时成功则返回-1,失败则发生异常.

      OleDbCommand.ExecuteNonQuery()执行Create,Drop时成功则返回0,失败也发生异常

     

  • 相关阅读:
    flashplayer关闭休眠模式
    大道至简,职场上做人做事做管理[转一下]
    flash程序员对python中while True的理解
    github搭建个人主页
    flash素材在as程序中使用的几种方法
    python中解析xml文档转化成字符串的方法
    查看修改mysql编码方式
    FusionCharts
    extJSjson字符串和json对象
    我的收藏
  • 原文地址:https://www.cnblogs.com/junier/p/2556452.html
Copyright © 2011-2022 走看看