注意 ExecuteNonQuery() 返回值 问题

前些日子作一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 。但是实际上并不是这样的,好在处理的数据操作多时 修改, 插入, 删除,否则的话问题就有点打了,都是些基础的知识,但是很重要个人觉得有必要记下来。
    ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1

出自:http://www.cnblogs.com/xuchuansong/archive/2011/06/11/xcs626281959.html

### 三级标题:`ExecuteNonQuery` 方法的作用与功能 `ExecuteNonQuery` 方法用于执行不返回结果集的 SQL 操作命令,适用于对数据库进行修改但不需要返回具体数据的场景。该方法通常用于执行 `INSERT`、`UPDATE`、`DELETE` 等操作,也可以用于执行创建表、索引等 DDL 语句,以及调用没有返回值的存储过程。此方法的返回值表示受该 SQL 操作影响的行数,如果操作未影响任何行,则返回值为 0;对于非更新类语句(如 `CREATE TABLE`),返回值为 -1 [^2]。 ### 三级标题:使用场景与典型应用 在实际开发中,`ExecuteNonQuery` 常用于以下场景: - 插入新记录到数据库表中。 - 更新现有记录的字段值。 - 删除符合条件的记录。 - 执行数据库结构变更操作(如创建表或索引)。 - 调用不返回结果的存储过程。 例如,以下代码演示了如何使用 `ExecuteNonQuery` 来更新数据库中的学生信息: ```csharp string updateQuery = "UPDATE studentInfo SET sName = '小李' WHERE ID = '200131500145'"; SqlConnection conn = new SqlConnection(); conn.ConnectionString = connectionString; SqlCommand cmd = new SqlCommand(updateQuery, conn); conn.Open(); int recordsAffected = cmd.ExecuteNonQuery(); conn.Close(); ``` 在此示例中,`ExecuteNonQuery` 返回的 `recordsAffected` 变量表示受影响的记录数量,可用于判断操作是否成功执行 [^3]。 ### 三级标题:注意事项与最佳实践 在使用 `ExecuteNonQuery` 时,需要注意以下几点: - 在调用 `ExecuteNonQuery` 之前,必须确保数据库连接已经打开。如果连接未打开,将抛出异常 [^1]。 - 如果 SQL 语句或存储过程执行失败,或者操作被回滚,则 `ExecuteNonQuery` 返回值为 -1 [^2]。 - 为了防止 SQL 注入攻击,应尽量使用参数化查询来传递用户输入值,而不是直接拼接 SQL 语句。 - 使用 `using` 语句可以确保 `SqlCommand` 和 `SqlConnection` 对象在使用完毕后被正确释放,从而避免资源泄漏。 以下是一个使用参数化查询的示例: ```csharp string deleteQuery = "DELETE FROM Table1 WHERE id > @id"; SqlCommand cmd = new SqlCommand(deleteQuery, cn); cmd.Parameters.AddWithValue("@id", 1); int count = cmd.ExecuteNonQuery(); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值