关于ExecuteNonQuery执行存储过程的返回值

原文地址:http://blog.sina.com.cn/s/blog_4d38a3b00100d4t5.html

用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过.

if(cmd.ExecuteNonQuery("xxxx")>0)

{

    //执行成功!

}

else

{

     //执行失败!

}

通过ExecuteNonQuery()的返回值来判断操作数据库的成功与否是可以的.但是要分情况.

1.ExecuteNonQuery() 不执行存储过程.

此时如果对数据库执行,插入,更新,删除操作,返回的是 受影响的行数.(及一个大于等于0的整数)

2.ExecuteNonQuery() 执行查询不返回影响的行数.

2.ExecuteNonQuery   执行存储过程.

[1].存储过程有返回值(传出参数)

   (1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).

    (2).把某个值赋给返回值.

[2].存储过程没有返回值

    执行成功后返回 -1.

(没有返回值的存储过程理应 返回 受影响的行数 (执行 增删改) 但是.但我们在ado.net中执行存储过程的时候,dotnet 自动为给了存储过程一个默认值:set nocount on;

所以给我们的感觉是执行存储过程默认返回 -1  )

 

 

ExecuteNonQuery()返回值注意点  

 

原文地址:http://nqyongyuan.blog.163.com/blog/static/3743196420089132363175/

 

 

查询某个表中是否有数据的时候,我用了ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否。结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解,回头查了下资料,如下显示:

 

SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影响的行数。

 

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

 

      虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1

 

       看完后才明白,原来select语句不适合ExecuteNonQuery()方法,原来是这样,真笨,方法用错了!特意把它记录下来,希望朋友不要犯类似的错误!

 

public int ExecuteNonQuery();

 

返回值

 

受影响的行数。

 

实现

 

IDbCommand.ExecuteNonQuery

 

备注

 

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

 

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

 

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

 

[C#]

 

public void CreateMySqlCommand(string myExecuteQuery, SqlConnection myConnection)

 

{

 

     SqlCommand myCommand = new SqlCommand(myExecuteQuery, myConnection);

 

     myCommand.Connection.Open();

 

     myCommand.ExecuteNonQuery();

 

     myConnection.Close();

 

}

 

 

 

posted @ 2011-09-04 01:14  活学巧用课堂  阅读(1454)  评论(0编辑  收藏  举报