ExecuteNonQuery()执行存储过程的返回值问题?

hxh016 2007-04-19 10:41:19

问题是这样的:

MSND上说; ExecuteNonQuery 在执行UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。
可是我用的时候,一直返回-1(-1代表执行失败!)
我从数据库里看到,执行成功。

create table StudentResume --创建一个表
(
StdID int,
StudentID nvarchar(50),
InitiationTime datetime,
TerminationTime datetime,
LocationIN nvarchar(50),
WorkContent nvarchar(MAX),
Position nvarchar(50),
Authenticator nvarchar(50),
Notes nvarchar(MAX)
)

//创建一个存储过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
create PROCEDURE [dbo].[prInsertStudentResume]
-- Add the parameters for the stored procedure here
@StdID int,
@StudentID nvarchar(50),
@InitiationTime datetime,
@TerminationTime datetime,
@LocationIN nvarchar(50),
@WorkContent nvarchar(MAX),
@Position nvarchar(50),
@Authenticator nvarchar(50),
@Notes nvarchar(MAX)

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
if(@InitiationTime='')
begin
set @InitiationTime=null
end
if(@TerminationTime='')
begin
set @TerminationTime=null
end
if(@LocationIN='')
begin
set @LocationIN=null
end
if(@WorkContent='')
begin
set @WorkContent=null
end
if(@Position ='')
begin
set @Position=null
end
if(@Authenticator='')
begin
set @Authenticator=null
end
if(@Notes='')
set @Notes=null
/*--
-- 定义一个局部变量,保存@@rowCount的值
*/
declare @rows int
select @rows = @@rowCount

--然后执行插入
insert StudentResume(StdID,StudentID,InitiationTime,TerminationTime,LocationIN,WorkContent,Position,Authenticator,Notes)
values(@StdID,@StudentID,@InitiationTime,@TerminationTime,@LocationIN,@WorkContent,@Position,@Authenticator,@Notes)

select @rows = @@rowCount

declare @ErrorCode int
select @ErrorCode=@@Error
if @ErrorCode<>0
begin
RaisError('Error occurred while inserting into StudentResume!',16,1)
Return @ErrorCode
end
--判断,如果@rows为0,则
if @rows = 0
Print 'No rows were inserted!'

--如果@rows为1,则显示1
if @rows = 1
Print '1'
--返回@rows的值,代表@@rowCount 修改的行数
Return @rows
END

然后执行这段存储过程(这是petshop4上的SQLHelper上的一段程序)
运行代码函数 //相关参数都以准确的得到
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connectionString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery(); //这里始终是返回-1,在SQL2005的查询分析器中执行存储过程可以返回的正确的结果是1(正确)
cmd.Parameters.Clear();
return val;
}
}

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{

if (conn.State != ConnectionState.Open)
conn.Open();

cmd.Connection = conn;
cmd.CommandText = cmdText;

if (trans != null)
cmd.Transaction = trans;

cmd.CommandType = cmdType;

if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
...全文
516 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zq200487731 2007-04-19
  • 打赏
  • 举报
回复
For all other types of statements, the return value is -1.
Arieslns 2007-04-19
  • 打赏
  • 举报
回复
貌似除了Update,insert,delete语句之外都返回-1吧
最后一只恐龙 2007-04-19
  • 打赏
  • 举报
回复
你的ExecuteNonQuery返回的是执行存储过程的返回值,而不是返回的你的Return @rows 。
只有语句ExecuteNonQuery的返回值才有效。
babyrockxray 2007-04-19
  • 打赏
  • 举报
回复
存储过程里面既然return @row了
就调用ExcuteScalar()来获得返回值
tesling 2007-04-19
  • 打赏
  • 举报
回复
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref4/html/M_System_Data_SqlClient_SqlCommand_ExecuteNonQuery.htm
tesling 2007-04-19
  • 打赏
  • 举报
回复
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.

============================================
上面是msdn里的解释,很清楚吧

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧