从存储过程中获取插入/更新/删除的行数-Linq to SQL
作者:互联网
我正在调用一个存储过程,该存储过程从Linq进行一些更新/插入/删除(一次执行其中的任何一个).此存储过程已添加到我正在使用的datacontext中.调用此存储过程后,我想获取受此存储过程影响的行数.此存储过程也可能会影响多个表.
我尝试使用datacontext的GetChangeSet方法,但对于在此存储过程中执行的插入/更新/删除操作,它不返回受影响的行数.
我不想使用@@ rowcount并将该行数作为返回值返回.
有什么办法可以找到此受影响的行数?
解决方法:
在您的存储过程中,您可以创建一个表变量(如果无法使用表变量,则可以创建一个临时表),然后在存储过程的每一部分都影响到表的行数之后将@@ rowcount插入其中.表变量作为存储过程中的最后一个操作.
例如
CREATE PROCEDURE myProc
AS
BEGIN
DECLARE @ra TABLE
(
rowsAffected INT,
queryName VARCHAR(50)
)
INSERT INTO sometable
SELECT col1, col2
FROM someothertable
INSERT INTO @ra (rowsAffected, queryName) VALUES (@@ROWCOUNT, 'insert into sometable')
DELETE FROM anothertable
WHERE thingID = something
INSERT INTO @ra (rowsAffected, queryName) VALUES (@@ROWCOUNT, 'delete from anothertable')
SELECT rowsAffected, queryName
FROM @ra
END
然后更新您的DBML,以使Linq中的行可用于SQL查询.
标签:linq-to-sql,c,stored-procedures 来源: https://codeday.me/bug/20191209/2097803.html