【发布时间】:2019-09-06 11:03:43
【问题描述】:
我有一个存储过程,我想在 Web API (C#) 中使用它的结果。
我必须错过一些东西,因为我没有得到任何结果,也没有得到Complex Types(在EF模型中),也没有得到Functions Imports(我可以在Functions Imports中看到存储过程,但它没有返回任何值,正如预期的那样)。
这是我的存储过程(我已经删除了一些不重要的数据以使其更短)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@main_id BIGINT,
@id_ze_mish BIGINT,
@id_nof BIGINT,
@loggedInUser VARCHAR(20)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION [TransactionUniteSingles]
OPEN SYMMETRIC KEY io_key DECRYPTION BY CERTIFICATE chn_cert
-- Step 1
UPDATE [dbo].[t1]
SET deleted = 1,
WHERE id_nof = @id_nof
AND id_ze = @id_ze_mish
-- Step 2
UPDATE [dbo].[t_no_nir]
SET update_stamp = GETDATE(),
[user_name] = @loggedInUser
WHERE id_nof = @id_nof
AND ms_zehut_mazmin = @id_ze_mish
-- Step 3
CREATE TABLE #mainPrice
(
id INT,
fName VARCHAR(20),
lName VARCHAR(20)
)
INSERT INTO #mainPrice
EXEC [dbo].[io_sp_get_some_data_foo] @id
IF(EXISTS(select * from #mainPrice))
BEGIN
DECLARE @totalAmount INT;
SELECT @totalAmount = (main_price + price_tip + price_visa)
FROM #mainPrice
DROP TABLE #mainPrice
UPDATE [dbo].[t_4]
SET amount = @totalAmount,
update_stamp = GETDATE(),
[user_name] = @loggedInUser
WHERE id_nof = @id_nof
AND id = @main_id
CLOSE ALL SYMMETRIC KEYS
COMMIT TRANSACTION [TransactionUniteSingles]
SELECT CAST(1 as BIT) as 'Status', 'Succeeded' as 'ReturnMessage'
END
ELSE
BEGIN
SELECT CAST(0 as BIT) as 'Status', 'ADMIN - Unite Singles as 'ReturnMessage'
END
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [TransactionUniteSingles]
SELECT CAST(0 as BIT) as 'Status', 'ADMIN - Unite Singles' as 'ReturnMessage'
END CATCH
END
请注意 - 当独立运行存储过程时,它可以完美运行并返回预期的结果。
【问题讨论】:
-
如果你输入你的
ELSE,你永远不会COMMIT(或ROLLBACK)你的交易。 -
正确。但是问题还没有解决
-
c#在读什么表?是 io_sp_get_some_data_foo 吗?读取 SSMS 中的表并查看它是否包含数据?看起来 SP 正在加载表 mainPrice 但我不确定 c# 代码正在读取什么。
-
@jdweng 基本上,C# 应该返回由以下
select创建的表:SELECT CAST(0 as BIT) as 'Status', 'ADMIN - Unite Singles' as 'ReturnMessage' -
那么调用存储过程的C#代码在哪里呢?
标签: c# sql-server entity-framework stored-procedures