【发布时间】:2019-03-24 22:52:39
【问题描述】:
我用 C# 编写了一个工具,它允许我的经理在每个月底运行一组 SQL 命令。 SQL 命令存储在数据库中,因此我可以在需求变化时轻松维护它。根据前一个命令的成功与否,每个后续命令可能会或可能不会被允许运行。
实际上存储在我的数据库中的命令只是一个 SQL 命令,它调用所有复杂内容所在的存储过程。
我正在使用命令 C#ExecuteNonQuery(),如果它失败,通常会返回 -1,如果成功则返回其他值(到目前为止一切都很好)。多年来一直如此。
现在是维护位。
我所有的存储过程之前都在更新我的数据库中的数据。我现在需要添加一个存储过程来检查数据库中是否已经存在某些内容。如果它不存在或完全失败,如果数据确实存在,我想返回 -1 或其他值。
我已尝试转为 SET NOCOUNT OFF,但这并没有帮助,我认为我已经缩小了范围,因为我的最新程序没有更新任何内容,因此 ExecuteNonQuery 认为这是失败的。
我已经在 Management Studio 中运行了这些命令,它们按预期报告了成功。当前命令甚至在消息选项卡中返回“1 行影响”。
这是存储过程代码,因此您可以看到我到目前为止所做的尝试。 我试图避免修改我的 C# 程序,以便根据调用的 SQL 类型使用不同的命令。
有人有想法吗?
USE [Billing]
GO
/****** Object: StoredProcedure [dbo].[Billing_Test_Uncharged_Entries]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--
ALTER PROCEDURE [dbo].[Billing_Test_Uncharged_Bing_Entries]
-- Add the parameters for the stored procedure here
AS
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
BEGIN TRY
--SET NOCOUNT ON;
Set NOCOUNT OFF;
-- Insert statements for procedure here
--SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
If Not Exists
(
SELECT [lSundriesID]
FROM [Strata].[dbo].[vjrSundries]
where
lFeeCodeID = '77' And
-- lFeeCodeID = '999' And --(Use this line to force an error during testing)
lMonthfeeApplies is null
)
Begin
--print 'Nothing to see here'
--Return -1
SELECT
@ErrorMessage = 'No FeeCodeID=77 Items found, Has the Bing EP Mailroom import process been run in Sundries',
@ErrorSeverity = 11,
@ErrorState = 1;
RAISERROR (
@ErrorMessage, -- Message text
@ErrorSeverity, -- Severity
@ErrorState -- State
);
End
Else
Begin
Select 'Found Something'
End
END Try
Begin Catch
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
End Catch
【问题讨论】:
标签: c# sql-server