ExecuteNonQuery是ADO.NET中用于执行INSERT、UPDATE和DELETE语句的方法,它会返回受影响的行数,但对于SQL语句和存储过程,其返回值有所不同。
对于SQL语句来说,ExecuteNonQuery返回值表示受影响的行数,也就是执行该SQL语句后,数据库中被更新(插入、更新或删除)的记录数。例如,如果你执行一条SQL语句:
```sql
UPDATE Customers SET ContactName='John' WHERE CustomerID=1
```
如果该语句成功执行,则会将CustomerID等于1的客户的ContactName更新为John,同时返回1表示受影响的行数。
而对于存储过程来说,ExecuteNonQuery返回值有多种可能,需要根据存储过程中的代码逻辑以及参数传递情况来确定。以下是一些常见的返回值情况:
1. 存储过程中使用了OUTPUT参数或返回值,如果在执行完存储过程后获取了这些输出参数或返回值,则ExecuteNonQuery返回-1。
```csharp
using(var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("myStoredProcedure", conn);
cmd.CommandType = CommandType.StoredProcedure;
// 设置存储过程的输入参数
cmd.Parameters.AddWithValue("@InputParam", 123);
// 添加OUTPUT参数
var outputParam = new SqlParameter("@OutputParam", SqlDbType.VarChar, 50);
outputParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outputParam);
conn.Open();
cmd.ExecuteNonQuery();
// 获取OUTPUT参数的值
var outputValue = outputParam.Value;
// 返回-1表示存储过程执行成功但返回值不是受影响的行数
return -1;
}
```
2. 存储过程中使用了RETURN语句返回值,在执行完存储过程后使用ExecuteScalar方法获取该返回值。
```csharp
using(var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("myStoredProcedure", conn);
cmd.CommandType = CommandType.StoredProcedure;
// 设置存储过程的输入参数
cmd.Parameters.AddWithValue("@InputParam", 123);
conn.Open();
var returnValue = cmd.ExecuteScalar();
// 返回-1表示存储过程执行成功但返回值不是受影响的行数
return -1;
}
```
3. 存储过程中未使用OUTPUT参数或RETURN语句,则ExecuteNonQuery返回受影响的行数。
```csharp
using(var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("myStoredProcedure", conn);
cmd.CommandType = CommandType.StoredProcedure;
// 设置存储过程的输入参数
cmd.Parameters.AddWithValue("@InputParam", 123);
conn.Open();
var rowsAffected = cmd.ExecuteNonQuery();
// 返回受影响的行数
return rowsAffected;
}
```
总之,ExecuteNonQuery在执行SQL语句时返回受影响的行数,在执行存储过程时则需要根据存储过程中的代码逻辑和参数传递情况来确定返回值。
购买后如果没出现相关链接,请刷新当前页面!!!
链接失效的请留言 ,我看见了就补上!!!
网站内容来源于互联网,我们将这些信息转载出来的初衷在于分享与学习,这并不意味着我们站点对这些信息的观点或真实性作出认可,我们也不承担对这些信息的责任。
适度游戏益脑,沉迷游戏伤身。 合理安排时间,享受健康生活。适龄提示:适合18岁以上使用!
发表评论 取消回复