第一点,只有select类型的sql sever的存储过程需要一个返回参数,Insert, Update, Delete类型的存储过程不需要多余的参数,只加上与业务逻辑相关的参数即可。因为上层用SqlCommand类调用ExecuteNonQuery()的时候是返回一个int类型的值的,即是受影响的行数。如果这个值大于0,说明存储过程执行成功了,反之可以判断出执行失败了。
另一点,最好把select类和(Insert, Update, Delete类型)的语句分割为两个存储过程,不要一个存储过程里面,既有update table,又有select结果集。
SqlCommand.ExecuteNonQuery()的官方解释:
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。如果正在执行插入或更新操作的表上存在触发器,则返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。对于其他所有类型的语句,返回值为 -1。如果发生回滚,则返回值也是 -1。