C# 在C中显示@@ROWCOUNT#
执行存储过程后,如何在方法中显示C# 在C中显示@@ROWCOUNT#,c#,stored-procedures,C#,Stored Procedures,执行存储过程后,如何在方法中显示@@ROWCOUNT?我想计算执行INSERT和UPDATE语句后受影响的行数: CREATE PROCEDURE [dbo].[ADProcTemp] @Username varchar(250), @DisplayName varchar(70), @isEnabled tinyint, @PassNevExp tinyint, @rowcount int OUT AS --SET NOCOUNT ON BEGI
@@ROWCOUNT
?我想计算执行INSERT
和UPDATE
语句后受影响的行数:
CREATE PROCEDURE [dbo].[ADProcTemp]
@Username varchar(250),
@DisplayName varchar(70),
@isEnabled tinyint,
@PassNevExp tinyint,
@rowcount int OUT
AS
--SET NOCOUNT ON
BEGIN
IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK)
WHERE NetworkLogin = @Username)
BEGIN
IF(@isEnabled = 1 OR @PassNevExp = 1)
INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)
SET @rowcount = @@ROWCOUNT;
RETURN @@ROWCOUNT;
END
ELSE
BEGIN
UPDATE [dbo].[tblZaposleni_AD]
SET Status = @isEnabled,
PassNevExp = @PassNevExp
WHERE NetworkLogin = @Username
AND (Status <> @isEnabled OR [PassNevExp] <>@PassNevExp)
END
END
var effectedRows = Convert.ToInt32(cmd.Parameters["@rowCount"].Value);
执行sp后,需要获取OUT参数的值:
CREATE PROCEDURE [dbo].[ADProcTemp]
@Username varchar(250),
@DisplayName varchar(70),
@isEnabled tinyint,
@PassNevExp tinyint,
@rowcount int OUT
AS
--SET NOCOUNT ON
BEGIN
IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK)
WHERE NetworkLogin = @Username)
BEGIN
IF(@isEnabled = 1 OR @PassNevExp = 1)
INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)
SET @rowcount = @@ROWCOUNT;
RETURN @@ROWCOUNT;
END
ELSE
BEGIN
UPDATE [dbo].[tblZaposleni_AD]
SET Status = @isEnabled,
PassNevExp = @PassNevExp
WHERE NetworkLogin = @Username
AND (Status <> @isEnabled OR [PassNevExp] <>@PassNevExp)
END
END
var effectedRows = Convert.ToInt32(cmd.Parameters["@rowCount"].Value);
执行sp后,需要获取OUT参数的值:
CREATE PROCEDURE [dbo].[ADProcTemp]
@Username varchar(250),
@DisplayName varchar(70),
@isEnabled tinyint,
@PassNevExp tinyint,
@rowcount int OUT
AS
--SET NOCOUNT ON
BEGIN
IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK)
WHERE NetworkLogin = @Username)
BEGIN
IF(@isEnabled = 1 OR @PassNevExp = 1)
INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)
SET @rowcount = @@ROWCOUNT;
RETURN @@ROWCOUNT;
END
ELSE
BEGIN
UPDATE [dbo].[tblZaposleni_AD]
SET Status = @isEnabled,
PassNevExp = @PassNevExp
WHERE NetworkLogin = @Username
AND (Status <> @isEnabled OR [PassNevExp] <>@PassNevExp)
END
END
var effectedRows = Convert.ToInt32(cmd.Parameters["@rowCount"].Value);
您只在插入分支而不是更新分支中分配@rowcount=@@rowcount,这似乎是错误的。此外,您在c代码中没有使用“rowsAffected”,而是使用ExecuteOnQuery的返回值。为什么?我没有将@rowcount=@@rowcount放入更新中的原因是我首先要测试我的插入函数。另外-不要执行查询两次!您有
int k=cmd.ExecuteNonQuery()
和下面几行int result=Convert.ToInt32(cmd.ExecuteScalar())代码>-删除第二个呼叫!是的,我明白了。我把阿雷迪带走。非常感谢。无论我在代码中做了什么更改,都没有得到任何结果。您只是在insert分支中分配@rowcount=@@rowcount,而不是在update分支中,这似乎是错误的。此外,您在c代码中没有使用“rowsAffected”,而是使用ExecuteOnQuery的返回值。为什么?我没有将@rowcount=@@rowcount放入更新中的原因是我首先要测试我的插入函数。另外-不要执行查询两次!您有int k=cmd.ExecuteNonQuery()
和下面几行int result=Convert.ToInt32(cmd.ExecuteScalar())代码>-删除第二个呼叫!是的,我明白了。我把阿雷迪带走。非常感谢。无论我在代码中做了什么更改,我都没有得到任何结果。严重性代码描述项目文件行抑制状态错误CS1061“SqlParameterCollection”不包含“get”的定义,并且找不到接受类型为“SqlParameterCollection”的第一个参数的可访问扩展方法“get”(是否缺少using指令或程序集引用?@Robby-抱歉,已更新。我使用的是DynamicParameters,但现在改为使用SqlParametersAfter int k=cmd.ExecuteOnQuery();让我检查一下现在会发生什么无论我做什么,rowsAffected都不会返回任何ThinkSeverity代码描述项目文件行抑制状态错误CS1061'SqlParameterCollection'不包含'Get'的定义,并且找不到接受'SqlParameterCollection'类型的第一个参数的可访问扩展方法'Get'(您是否缺少using指令或程序集引用?@Robby-抱歉,已更新。我使用的是DynamicParameters,但现在改为使用SqlParametersAfter int k=cmd.ExecuteOnQuery();让我检查现在会发生什么无论我做什么,rowsAffected都不会返回任何想法